无法在火花中写入 csv 文件
Posted
技术标签:
【中文标题】无法在火花中写入 csv 文件【英文标题】:Unable to write a csv file in spark 【发布时间】:2016-08-14 17:43:33 【问题描述】:我正在尝试使用 spark 1.6.1 编写一个 csv 文件。 假设我有一个这样的 csv 文件:
date,category
19900108,apples
19900108,apples
19900308,peaches
19900408,peaches
19900508,pears
19910108,pears
19910108,peaches
19910308,apples
19910408,apples
19910508,apples
19920108,pears
19920108,peaches
19920308,apples
19920408,peaches
19920508,pears
我想创建一个这样的输出 csv 文件:
date,apples,peaches,pears
1990,2,2,1
1991,3,1,1
1992,1,2,2
我正在使用这个 scala 代码来加载文件:
spark-shell --packages com.databricks:spark-csv_2.11:1.2.0
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.functions._
val sqlContext = new SQLContext(sc)
var df = sqlContext.read.format("com.databricks.spark.csv").option("header","true").option("inferSchema", "true").load("data/sample.csv")
df = df.withColumn("year", df.col("date").substr(0,4))
df.groupBy("year").pivot("category").agg("category"->"count").show()
当我运行它时,我得到了这个正是我想要的数据框
+----+------+-------+-----+
|year|apples|peaches|pears|
+----+------+-------+-----+
|1990| 2| 2| 1|
|1991| 3| 1| 1|
|1992| 1| 2| 2|
+----+------+-------+-----+
但是当我尝试使用此代码将其写入 CSV 时:
df.coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save("mydata4.csv")
这是我打开它时得到的 csv 文件,这不是我要找的。p>
date,category,year
19900108,apples,1990
19900108,apples,1990
19900308,peaches,1990
19900408,peaches,1990
19900508,pears,1990
19910108,pears,1991
19910108,peaches,1991
19910308,apples,1991
19910408,apples,1991
19910508,apples,1991
19920108,pears,1992
19920108,peaches,1992
19920308,apples,1992
19920408,peaches,1992
19920508,pears,1992
我错过了什么吗?难道我做错了什么?
【问题讨论】:
【参考方案1】:您忘记将查询结果存储到新变量中。
val xf = df.groupBy("year").pivot("category").agg("category"->"count")
然后使用你的最后一行代码编写它。
xf.coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save("mydata4.csv")
【讨论】:
以上是关于无法在火花中写入 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章