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