当前位置:  开发笔记 > 编程语言 > 正文

Dataframes Pyspark中Timestamp列的分区

如何解决《DataframesPyspark中Timestamp列的分区》经验,为你挑选了1个好方法。

DataFrame在PSspark中有以下格式

Date        Id  Name    Hours   Dno Dname
12/11/2013  1   sam     8       102 It
12/10/2013  2   Ram     7       102 It
11/10/2013  3   Jack    8       103 Accounts
12/11/2013  4   Jim     9       101 Marketing

我想做基于分区的分区,dno并使用Parquet格式保存为Hive中的表.

df.write.saveAsTable(
    'default.testing', mode='overwrite', partitionBy='Dno', format='parquet')

该查询工作正常,并在Hive中使用Parquet输入创建了表.

现在我想根据日期列的年份和月份进行分区.时间戳是Unix时间戳

我们怎样才能在PySpark中实现这一目标.我已经在蜂巢中完成了它但无法做到PySpark



1> user6910411..:

只需提取您要使用的字段,并提供列列表作为编写器的参数partitionBy.如果timestampUNIX时间戳以秒表示:

df = sc.parallelize([
    (1484810378, 1, "sam", 8, 102, "It"),
    (1484815300, 2, "ram", 7, 103, "Accounts")
]).toDF(["timestamp", "id", "name", "hours", "dno", "dname"])

添加列:

from pyspark.sql.functions import year, month, col

df_with_year_and_month = (df
    .withColumn("year", year(col("timestamp").cast("timestamp")))
    .withColumn("month", month(col("timestamp").cast("timestamp"))))

和写:

(df_with_year_and_month
    .write
    .partitionBy("year", "month")
    .mode("overwrite")
    .format("parquet")
    .saveAsTable("default.testing"))

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有