我正在做
df.write.mode("overwrite").partitionBy("sourcefilename").format("orc").save("s3a://my/dir/path/output-data");
以上代码确实在分区目录中成功生成了orc文件名,但是命名类似于part-0000。
我需要在保存例如通过(sourcefilename)值更改分区如果源文件名是ABC,则分区目录(在写操作时将创建)应该是123,如果DEF是345,依此类推。
我们如何满足以上要求?我正在使用AWS S3读写文件。
我正在使用Spark 2.x和Scala 2.11。
答案 0 :(得分:1)
鉴于此示例显示了DF Writer常规
df.write.partitionBy("EVENT_NAME","dt","hour").save("/apps/hive/warehouse/db/sample")
format,那么您的方法应该是创建一个额外的列xc,该列由UDF设置,或者由一些def或val来根据名称设置xc,例如ABC-> 123,等等。然后按此xc col进行分区,并接受part-xxxxx就是它在Spark中的工作方式。
然后您可以随后自己通过脚本重命名文件。
答案 1 :(得分:0)
part-1234样式是工作的分区方式:不同的任务获得拆分数据源的自己的分区,并用编号保存,以确保其他任务不会产生相同名称的输出。
这是获得并行执行性能的基础。