如何在spark scala中编写带有自定义delimeiter(ctrl-a分隔符)文件的dataframe/RDD?

如何在spark scala中编写带有自定义delimeiter(ctrl-a分隔符)文件的dataframe/RDD?,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,我正在使用poc,我需要在其中创建dataframe,然后将其保存为一个分隔文件。 下面是我创建中间结果的查询 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"))

我正在使用poc,我需要在其中创建dataframe,然后将其保存为一个分隔文件。 下面是我创建中间结果的查询

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)
将结果保存在文本文件中

grouped.select($"club_data", $"student_id_add", $"amount",$"cnt").rdd.saveAsTextFile("/amit/spark/output4/")
输出:

 [amit,DI^A356035,581,1]
它将数据保存为逗号分隔,但我需要将其保存为ctrl-A分隔 我尝试了optiondelimiter,\u0001,但似乎dataframe/rdd不支持它


是否有任何功能可以帮助?

保存前将行转换为文本:

df.rdd.map(x=>x.mkString("^A")).saveAsTextFile("file:/home/iot/data/stackOver")
grouped.select($"club_data", $"student_id_add", $"amount",$"cnt").map(row => row.mkString(\u0001")).saveAsTextFile("/amit/spark/output4/") 

如果您有一个数据帧,您可以使用Spark CSV以CSV的形式写入,分隔符如下所示

df.write.mode(SaveMode.Overwrite).option("delimiter", "\u0001").csv("outputCSV")
使用旧版本的Spark

df.write
    .format("com.databricks.spark.csv")
    .option("delimiter", "\u0001")
    .mode(SaveMode.Overwrite)
    .save("outputCSV")
你可以阅读下面的内容

spark.read.option("delimiter", "\u0001").csv("outputCSV").show()
如果您有RDD,则可以在RDD上使用mkString函数并使用saveAsTextFile保存


希望这有帮助

您可以在rdd上使用mkString函数并另存为文本文件。使用Spark CSV写入数据。指定optiondelimiter,\\01您正在使用文字^A而不是Ctrl Ausing csv选项我无法编译我的代码错误:值csv不是org.apache.spark.sql.DataFrameWrite的成员[错误]C:\Users\amit.pathak\workspace\SparkPOC\src\com\MapToSpark.scala:69:错误:value csv不是org.apache.spark.sql.DataFrameWriter[INFO]分组的成员。请选择$club\u data、$student\u id\u add、$amount、$cnt.write.modesavemodemode.Overwrite.optiondelimiter、\u0001.csv/amit/spark/output6/是否需要导入任何内容?让我们开始吧。
rdd.map(r => r.mkString(\u0001")).saveAsTextFile("outputCSV")