【问题标题】:Spark Sql Query火花 Sql 查询
【发布时间】:2020-01-17 09:13:00
【问题描述】:

我的数据集中有 4 列(用户、时间戳、ip、isadmin)。

现在我需要对上述数据集执行 spark sql 查询操作。让我们假设数据集变量名称是 myactivities。

我的 spark sql 查询应该添加名为“event_hour”的新列,该列从 HOUR(timestamp) 中提取,然后按 event_hour、用户分组。

下面是我试过的查询

myactivities.createOrReplaceTempView("hourly_sorted_activities");

Dataset<Row> sortedDataset = sparkSession.sql("SELECT Extract(HOUR FROM timestamp) as event_hour_window , user, timestamp, ip, isadmin FROM hourly_sorted_activities GROUP BY event_hour_window, user”);

Dataset<Employee> trimmeddataset = sortedDataset.as(Encoders.bean(Employee.class)

我从上面的第 2 行得到以下错误。

[main] 错误 com.x.x.x.xclass - 'FROM'(第 1 行,第 20 行)处缺少 ')'

== SQL ==
SELECT Extract(HOUR FROM timestamp) as event_hour_window , user, timestamp, ip, isadmin FROM hourly_sorted_activities GROUP BY event_hour_window, user
--------------------^^^

org.apache.spark.sql.catalyst.parser.ParseException: 
missing ')' at 'FROM'(line 1, pos 20)

== SQL ==

【问题讨论】:

  • 添加示例数据了解更多详情

标签: apache-spark apache-spark-sql


【解决方案1】:

我不知道为什么extract 不能以这种方式工作,但它对我来说也失败了。 (可能是版本问题?)要从时间戳中提取小时,请使用hour(&lt;ts column)

val foo = spark.sql(""" select current_timestamp as ts """)
foo.createOrReplaceTempView("fooView")
spark.sql("""select hour(ts) from fooVIew""").show
+--------+
|hour(ts)|
+--------+
|      10|
+--------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2015-09-13
    • 2016-05-16
    • 2017-07-08
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多