【发布时间】:2019-07-29 23:02:48
【问题描述】:
如果我对数据集进行分区,当我读回它时,它的顺序是否正确?例如,考虑以下 pyspark 代码:
# read a csv
df = sql_context.read.csv(input_filename)
# add a hash column
hash_udf = udf(lambda customer_id: hash(customer_id) % 4, IntegerType())
df = df.withColumn('hash', hash_udf(df['customer_id']))
# write out to parquet
df.write.parquet(output_path, partitionBy=['hash'])
# read back the file
df2 = sql_context.read.parquet(output_path)
我正在对 customer_id 存储桶进行分区。当我读回整个数据集时,是否保证分区按原始插入顺序重新合并在一起?
现在,我不太确定,所以我要添加一个序列列:
df = df.withColumn('seq', monotonically_increasing_id())
但是,我不知道这是否是多余的。
【问题讨论】:
-
顺便看看 bucketBy:spark.apache.org/docs/latest/… 这可能会做你试图用那个 UDF 做的事情,但更有效
标签: apache-spark pyspark parquet