Scala Spark.csv可变列数
我有这样一个案例课:Scala Spark.csv可变列数,scala,csv,apache-spark,Scala,Csv,Apache Spark,我有这样一个案例课: case class ResultDays (name: String, number: Double, values: Double*) 我想把它保存到一个.csv文件中 resultRDD.toDF() .coalesce(1) .write.format("com.databricks.spark.csv") .option("header", "true") .save("res/output/result.csv") 不幸的是,我有这个错误:
case class ResultDays (name: String, number: Double, values: Double*)
我想把它保存到一个.csv
文件中
resultRDD.toDF()
.coalesce(1)
.write.format("com.databricks.spark.csv")
.option("header", "true")
.save("res/output/result.csv")
不幸的是,我有这个错误:
java.lang.UnsupportedOperationException: CSV data source does not support array<double> data type.
java.lang.UnsupportedOperationException:CSV数据源不支持数组数据类型。
那么,我如何插入一个数量可变的
值
并将其保存到.csv
中呢?如果可以假设resultRDD
中的所有记录在值
中的列数相同,那么可以先读取记录,然后使用它来确定数组中的值数,并将这些数组转换为单独的列:
// determine number of "extra" columns:
val extraCols = resultRDD.first().values.size
// create a sequence of desired columns:
val columns = Seq($"name", $"number") ++ (1 to extraCols).map(i => $"values"(i - 1) as s"col$i")
// select the above columns before saving:
resultRDD.toDF()
.select(columns: _*)
.coalesce(1)
.write.format("com.databricks.spark.csv")
.option("header", "true")
.save("res/output/result.csv")
示例CSV结果如下所示:
name,number,col1,col2
a,0.1,0.01,0.001
b,0.2,0.02,0.002
c,0.3,0.03,0.003
CSV作为一种格式,不支持可变数量的值,因为所有记录必须具有相同的列。您知道预期值的数量吗?可能是values
成员可能具有的最大值数?我必须为每行写入相同数量的值,但我不知道在运行之前有多少值。好的-但是一旦有了resultRDD
,您可以假设所有记录都具有相同数量的值?是的,但是使用ResultDays
类,它包含Double*
,似乎我不能使用它