【问题标题】:Spark mixing dynamic/static partitionsSpark混合动态/静态分区
【发布时间】:2018-04-09 23:29:40
【问题描述】:

HAE 能否在使用 pyspark 时混合静态和动态分区?我想做的是执行动态分区,然后让最细粒度的分区级别是静态的。静态分区将是 ETL 作业的标识符,这意味着它必须是静态分区,除非我事先将其作为列添加到数据框中的每条记录中。

我现在拥有的是以下内容。它可能不是最佳的,因此欢迎提出建议。

dataFrame.repartition('year','month','day','hour').write.partitionBy('year','month','day','hour').mode('append').parquet(args['s3_dest'])

不知何故,我想引入一个额外的静态分区,以便记录在 s3 中显示为: s3://bucket/year=xxxx/month=xx/day=xx/hour=xx/executionId=xx

在 etl 脚本中生成 executionId 的位置。

【问题讨论】:

    标签: apache-spark hive pyspark spark-dataframe


    【解决方案1】:

    只需将executionId 添加为新列并将其附加到partitionBy 列表中:

    from pyspark.sql.functions import lit
    
    executionId = ...
    
    (dataFrame.withColumn('executionId', lit(executionId))
        .repartition('year', 'month', 'day', 'hour')  # No executionId here!
        .write.partitionBy('year', 'month', 'day', 'hour', 'executionId')
        .mode('append').parquet(args['s3_dest']))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多