在 PySpark 中写入数据帧的自定义文件名

Posted

技术标签:

【中文标题】在 PySpark 中写入数据帧的自定义文件名【英文标题】:Custom file name to write dataframe in PySpark 【发布时间】:2020-04-24 17:20:25 【问题描述】:

我想写数据帧的记录。记录为 json 格式。所以我需要用我的自定义文件名而不是 part-0000-cfhbhgh.json 将内容写入文件。

【问题讨论】:

【参考方案1】:

我在 scala 中给出答案,但在 python 中,这些也是必不可少的步骤..

 import org.apache.hadoop.fs.FileSystem, Path

  val fs: FileSystem = FileSystem.get(spark.sparkContext.hadoopConfiguration);
  val file = fs.globStatus(new Path("data/jsonexample/part*"))(0).getPath().getName()
  println("file name " + file)
  fs.rename(
    new Path("data/jsonexample/" + file)
    , new Path("data/jsonexample/tsuresh97_json_toberenamed.json"))

完整示例:

 import spark.implicits._

  val df = Seq(
    (123, "ITA", 1475600500, 18.0),
    (123, "ITA", 1475600500, 18.0),
    (123, "ITA", 1475600516, 19.0)
  ).toDF("Value", "Country", "Timestamp", "Sum")
  df.coalesce(1)
    .write
    .mode(SaveMode.Overwrite)
    .json("data/jsonexample/")

  import org.apache.hadoop.fs.FileSystem, Path

  val fs: FileSystem = FileSystem.get(spark.sparkContext.hadoopConfiguration);
  val file = fs.globStatus(new Path("data/jsonexample/part*"))(0).getPath().getName()
  println("file name " + file)
  fs.rename(
    new Path("data/jsonexample/" + file)
    , new Path("data/jsonexample/tsuresh97_json_toberenamed.json"))


结果:

json 内容:

"Value":123,"Country":"ITA","Timestamp":1475600500,"Sum":18.0
"Value":123,"Country":"ITA","Timestamp":1475600500,"Sum":18.0
"Value":123,"Country":"ITA","Timestamp":1475600516,"Sum":19.0

【讨论】:

以上是关于在 PySpark 中写入数据帧的自定义文件名的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据帧的 PySpark rdd

Scala中的Spark分组映射UDF

Pyspark 数据框:将 jdbc 写入具有给定模式的表的动态创建

如何在 pyspark 操作中轻松使用我的自定义类方法?

pyspark 数据框上的自定义函数

PySpark 中 JDBC 上的自定义分区