Apache spark 使用Spark中的数据类型map将数据帧写入csv

Apache spark 使用Spark中的数据类型map将数据帧写入csv,apache-spark,spark-dataframe,rdd,Apache Spark,Spark Dataframe,Rdd,我有一个文件是file1snapy.parquet。它有一个复杂的数据结构,比如一个地图,里面有一个数组。经过处理,我得到了最终的结果。在将结果写入csv时,我得到了一些错误信息 "Exception in thread "main" java.lang.UnsupportedOperationException: CSV data source does not support map<string,bigint> data type." 我试着将datadf.toString转

我有一个文件是file1snapy.parquet。它有一个复杂的数据结构,比如一个地图,里面有一个数组。经过处理,我得到了最终的结果。在将结果写入csv时,我得到了一些错误信息

"Exception in thread "main" java.lang.UnsupportedOperationException: CSV data source does not support map<string,bigint> data type."
我试着将datadf.toString转换,但仍然面临同样的问题。 如何将结果写入CSV。

Spark CSV源仅支持原子类型。不能存储任何非原子列

我认为最好是为具有map作为数据类型的列创建JSON,并将其保存在csv中,如下所示

import spark.implicits._ 
import org.apache.spark.sql.functions._

datadf.withColumn("column_name_with_map_type", to_json(struct($"column_name_with_map_type"))).write.csv("outputpath")
希望这有帮助

Spark CSV源仅支持原子类型。不能存储任何非原子列

我认为最好是为具有map作为数据类型的列创建JSON,并将其保存在csv中,如下所示

import spark.implicits._ 
import org.apache.spark.sql.functions._

datadf.withColumn("column_name_with_map_type", to_json(struct($"column_name_with_map_type"))).write.csv("outputpath")
希望这有帮助

您正在尝试保存的输出

datadf.select(col("neid"),sumaggr(col("marks")).as("sum")).filter(col("sum") =!= 0).show(false)
我猜这是一个错误,因为udf函数和所有的聚合都将徒劳,如果你这样做

所以我认为你想保存

datadf.select(col("neid"),sumaggr(col("marks")).as("sum")).filter(col("sum") =!= 0).show(false)
因此,您需要将其保存在新的dataframe变量中,并使用该变量进行保存

val finalDF = datadf.select(col("neid"),sumaggr(col("marks")).as("sum")).filter(col("sum") =!= 0)
finalDF.write.format("com.databricks.spark.csv").option("header", "true").save("C:\\myfile.csv")
您应该没事。

您正在尝试保存的输出

datadf.select(col("neid"),sumaggr(col("marks")).as("sum")).filter(col("sum") =!= 0).show(false)
我猜这是一个错误,因为udf函数和所有的聚合都将徒劳,如果你这样做

所以我认为你想保存

datadf.select(col("neid"),sumaggr(col("marks")).as("sum")).filter(col("sum") =!= 0).show(false)
因此,您需要将其保存在新的dataframe变量中,并使用该变量进行保存

val finalDF = datadf.select(col("neid"),sumaggr(col("marks")).as("sum")).filter(col("sum") =!= 0)
finalDF.write.format("com.databricks.spark.csv").option("header", "true").save("C:\\myfile.csv")

您应该很好。

您使用的spark版本是什么?spark版本2.1.1您使用的spark版本是什么?spark版本2.1.1表示$不是字符串Contextimport spark.implicits.\uImport org.apache.spark.sql.functions的成员。\导入spark.implicits时导入这两个。\表示找不到sparkval对象spark=SparkSession.builder.appNametest.masterlocal[*].GetorCreate如果您使用的是spark2.0+,则应使用SparkSession作为入口点,而不是SparkContextit。它表示$不是字符串Contextimport spark.implicits.的成员。\uImport org.apache.spark.sql.functions。\导入spark.implicits时导入这两个变量。\它表示找不到对象sparkval spark=SparkSession.builder.appNametest.masterlocal[*].GetOrCreate如果您使用的是spark2.0+,则应将SparkSession用作入口点,而不是SparkContext