Spark:PartitionBy,更改输出文件名

hli*_*hli 5 hdfs apache-spark apache-spark-sql pyspark

目前,当我使用paritionBy()写入 HDFS 时:

DF.write.partitionBy("id")
Run Code Online (Sandbox Code Playgroud)

我将得到如下输出结构(这是默认行为):

../id=1/

../id=2/

../id=3/
Run Code Online (Sandbox Code Playgroud)

我想要一个看起来像这样的结构:

../a/

../b/

../c/
Run Code Online (Sandbox Code Playgroud)

这样:

if id = 1, then a
if id = 2, then b

.. etc
Run Code Online (Sandbox Code Playgroud)

有没有办法改变文件名输出?如果没有,最好的方法是什么?

Jac*_*eow 1

您将无法使用 SparkpartitionBy来实现此目的。

相反,您必须将其分解DataFrame为各个组件分区,然后将它们一一保存,如下所示:

base = ord('a') - 1
for id in range(1, 4):
    DF.filter(DF['id'] == id).write.save("..." + chr(base + id))
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 Spark 的工具写入整个数据帧partitionBy,然后使用 HDFS API 手动重命名分区。