如何使用spark scala中的自定义分隔符(ctrl-A分隔)文件编写数据框/ RDD?

Ami*_*mit 0 scala dataframe apache-spark apache-spark-sql

我在poc工作,我需要创建数据帧,然后将其保存为ctrl一个分隔文件.我创建中间结果的查询如下

val grouped = results.groupBy("club_data","student_id_add","student_id").agg(sum(results("amount").cast(IntegerType)).as("amount"),count("amount").as("cnt")).filter((length(trim($"student_id")) > 1) && ($"student_id").isNotNull)
Run Code Online (Sandbox Code Playgroud)

将结果保存在文本文件中

grouped.select($"club_data", $"student_id_add", $"amount",$"cnt").rdd.saveAsTextFile("/amit/spark/output4/")
Run Code Online (Sandbox Code Playgroud)

输出:

 [amit,DI^A356035,581,1]
Run Code Online (Sandbox Code Playgroud)

它以逗号分隔保存数据,但我需要将其保存为ctrl-A单独的I尝试选项("分隔符","\ u0001")但似乎不受dataframe/rdd支持.

有什么功能有帮助吗?

Sha*_*ala 8

如果您有数据帧,则可以使用Spark-CSV作为带有分隔符的csv写入,如下所示.

df.write.mode(SaveMode.Overwrite).option("delimiter", "\u0001").csv("outputCSV")
Run Code Online (Sandbox Code Playgroud)

随着旧版本的Spark

df.write
    .format("com.databricks.spark.csv")
    .option("delimiter", "\u0001")
    .mode(SaveMode.Overwrite)
    .save("outputCSV")
Run Code Online (Sandbox Code Playgroud)

您可以回读如下

spark.read.option("delimiter", "\u0001").csv("outputCSV").show()
Run Code Online (Sandbox Code Playgroud)

如果你有一个RDD,你可以使用mkString()功能RDD并保存saveAsTextFile()

rdd.map(r => r.mkString(\u0001")).saveAsTextFile("outputCSV")
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!