Spark Sql:从时间戳按小时间隔分区

Posted

技术标签:

【中文标题】Spark Sql:从时间戳按小时间隔分区【英文标题】:Spark Sql : Partition by hour_interval from timestamp 【发布时间】:2019-09-13 05:04:17 【问题描述】:

我的数据集(SparkSql)中有 4 个字段,我的目标是从时间戳中提取小时,然后在 spark.sql 查询中按小时间隔进行分区

    用户名(varchar) 时间戳(长) ipaddress(varchar)

现在就是这些了,我需要从 longtimestamp 中按 hour_interval 进行分区。

所以我在 mysql 中创建了一个测试表并尝试了下面的命令,它适用于从时间戳获取小时 _interval

SELECT username, originaltime , ipaddress, HOUR(FROM_UNIXTIME(originaltime / 1000)) as hourinterval FROM testmyactivity ;

这给出了以下输出

suresasash3456 1557731954785 1.1.1.1 1 7

现在我需要按这个 hour_interval 进行分区,但我做不到

下面是不工作的查询

SELECT username, ipaddress , HOUR(FROM_UNIXTIME(originaltime / 1000)) as hourinterval, OVER (partition by hourinterval) FROM testmyactivity ;

上面给了我错误信息

在“按小时间隔分区”附近使用的正确语法

预期输出 第1步 : Spark Sql 查询可以从时间戳中提取小时,然后按小时间隔进行分区

Step2:完成上述步骤后,我可以在 hour_interval 上执行 groupByKey,这样我的数据集将平均分配给可用的执行者

【问题讨论】:

请重新表述您的问题,向我们展示清晰的示例输入以及预期的输出。 【参考方案1】:

here 是文档。

val partitioned_df = df.partitionBy($"colName")
partitioned_df.explain

现在您可以使用partitioned_df 进行分组查询。

【讨论】:

以上是关于Spark Sql:从时间戳按小时间隔分区的主要内容,如果未能解决你的问题,请参考以下文章