如何在spark scala中使用自定义delimeter(ctrl-a delimited)文件编写dataframe/RDD?

2024-06-16 10:14:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究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)

将结果保存到文本文件中

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

输出:

 [amit,DI^A356035,581,1]

它将数据保存为逗号分隔,但我需要将其保存为ctrl-A分隔 我尝试了option(“delimiter”,“\u0001”),但似乎dataframe/rdd不支持它。

有什么有用的功能吗?


Tags: 数据addiddataasamountstudentresults
3条回答
df.rdd.map(x=>x.mkString("^A")).saveAsTextFile("file:/home/iot/data/stackOver")

如果您有一个数据帧,您可以使用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.map(r => r.mkString(\u0001")).saveAsTextFile("outputCSV")

希望这有帮助!

保存前将行转换为文本:

grouped.select($"club_data", $"student_id_add", $"amount",$"cnt").map(row => row.mkString(\u0001")).saveAsTextFile("/amit/spark/output4/") 

相关问题 更多 >