Spark Scala Dataframe 到csv字符串

aydmsdu9  于 2023-03-02  发布在  Scala
关注(0)|答案(2)|浏览(135)

我有一个Spark数据框,我知道,适合在内存中。我想生成一个csv表示为字符串的驱动程序。

val df  = // Some DataFrame
val csv = // String Representation

我知道我能做到

df.repartition(1)
  .write.format("com.databricks.spark.csv")
  .option("header", "true")
  .save("/your/location/mydata")

然而,这会将csv文件保存到磁盘上,作为给定文件夹中的一些随机文件名。有没有办法,不将数据写入文件,而是将其作为字符串或其他表示形式获取?

jhkqcmku

jhkqcmku1#

有几种方法......也许最简单的方法是转换到Pandas Dataframe 并使用它编写CSV df.toPandas().to_csv()
在不依赖Pandas但依赖于Databricks dbutils的Databricks中也可以看到这种方式,后者在文件写入后基本上会移动并重命名文件。可以使用其他库实现,如AWS S3的boto3或其他存储技术的类似库,

file_location = f"{save_location}{name}.csv"

df.repartition(1).write.csv(path=csv_location, header="true")

file = dbutils.fs.ls(csv_location)[-1].path
dbutils.fs.cp(file, file_location)
dbutils.fs.rm(csv_location, recurse=True)
798qvoo8

798qvoo82#

下面的解可以给予String表示的数据从DataFrame,但可能不会给出确切的解决方案,你正在寻找。
从Dataframe获取字符串表示数据
使用map方法从Dataframe获取Row并转换为case类或使用tuple
使用collect方法并使用mkString()将其转换为String

val csvStrRepresentData:String = df.map{row=>CsvCaseClass(row.getAs[Type]("col_name"),row.getAs[Type]("col_name"),...row.getAs[Type]("col_name"))}
.collect()
.mkString("\n")

相关问题