【发布时间】:2020-09-29 10:24:44
【问题描述】:
我有以下制表符分隔的示例数据集:
col1 period col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22
ASSDF 202001 A B BFGF SSDAA WDSF SDSDSD SDSDSSS SDSDSD E F FS E CURR1 CURR2 -99 CURR3 -99 -99 -99 -99
ASSDF 202002 A B BFGF SSDAA WDSF SDSDSD SDSDSSS SDSDSD E F FS E CURR1 CURR2 -99 CURR3 -99 -99 -99 -99
ASSDF 202003 A B BFGF SSDAA WDSF SDSDSD SDSDSSS SDSDSD E F FS E CURR1 CURR2 -99 CURR3 -99 -99 -99 -99
ASSDF 202004 A B BFGF SSDAA WDSF SDSDSD SDSDSSS SDSDSD E F FS E CURR1 CURR2 -99 CURR3 -99 -99 -99 -99
...
...
ASSDF 202312 A B BFGF SSDAA WDSF SDSDSD SDSDSSS SDSDSD E F FS E CURR1 CURR2 -99 CURR3 -99 -99 -99 -99
我正在对这些数据进行一些转换,最终数据在 spark 数据集 "DS1" 中。之后,我将该数据集写入带有“周期”分区的 s3。由于我也需要 s3 文件中的句点,因此我正在从句点列创建另一列“datasetPeriod”。
我的 scala 函数来保存 TSV 数据集。
def saveTsvDataset(dataframe: DataFrame, outputFullPath: String, numPartitions: Integer, partitionCols: String*): Unit = {
dataframe
.repartition(numPartitions)
.write
.partitionBy(partitionCols:_*)
.mode(SaveMode.Overwrite)
.option("sep", "\t")
.csv(outputFullPath)
}
将数据集保存在 s3 上的 Scala 代码。为 s3 上的分区添加新列 datasetPeriod。
saveTsvDataset(
DS1.withColumn("datasetPeriod",$"period")
, "s3://s3_path"
, 100
, "period"
)
现在,我的问题是我的时间段从 202001 到 202312,当我在 s3 上使用“datasetPeriod”上的分区写入时,有时它会在分区内为任何随机时间段创建分区。所以这在任何时期都是随机发生的。我从来没有看到这种情况发生了多个时期。它创建像"s3://s3_path/datasetPeriod=202008/datasetPeriod=202008" 这样的路径。
【问题讨论】:
标签: scala apache-spark amazon-s3 apache-spark-sql apache-spark-dataset