在PySpark中保留paquet文件名

sbtkgmzw  于 2023-04-05  发布在  Spark
关注(0)|答案(1)|浏览(194)

我正在使用spark阅读一个有2个分区的parquet文件,以便应用一些处理,让我们举这个例子

├── Users_data
│ ├── region=eu
      ├── country=france
          ├─- fr_default_players_results.parquet
│ ├── region=na
      ├── country=us
          ├── us_default_players_results.parquet

当用df.write()写回Parquet地板时,有没有办法保持相同的文件名(在本例中为fr_default_players_results.parquetus_default_players_results.parquet)?

owfi6suc

owfi6suc1#

不,不幸的是,你不能用spark决定文件名,因为它们是自动生成的,但是你可以做的是创建一个包含文件名的列,然后按该列分区,这将创建一个包含文件名的目录,其中包含spark生成的文件:

df.withColumn("file_name", regexp_extract(input_file_name(), "[^/]*$", 0)).write.partitionBy("region", "country", "file_name").parquet("path/Users_data")

这将创建此树:

├── Users_data
│ ├── region=eu
      ├── country=france
          ├─- file_name=fr_default_players_results.parquet
              ├──part-00...c000.snappy.parquet
│ ├── region=na
      ├── country=us
          ├── file_name=us_default_players_results.parquet
              ├──part-00...c000.snappy.parquet

如果你想更进一步,真正改变名称,那么你可以使用hadooplibrary循环你的文件,将它们复制到父路径,并使用spark file_name=....parquet生成的文件夹名称重命名它们,然后删除文件夹

相关问题