Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在Spark 2.1中为集合编写编码器?_Apache Spark_Apache Spark Encoders - Fatal编程技术网

Apache spark 如何在Spark 2.1中为集合编写编码器?

Apache spark 如何在Spark 2.1中为集合编写编码器?,apache-spark,apache-spark-encoders,Apache Spark,Apache Spark Encoders,我有这个: import spark.implicits._ import org.apache.spark.sql.catalyst.encoders.RowEncoder val mydata: Dataset[Row] = spark.read.format("csv").option("header", true).option("inferSchema", true).load("mydata.csv") // CSV header: Time,Area,City // CSV va

我有这个:

import spark.implicits._
import org.apache.spark.sql.catalyst.encoders.RowEncoder

val mydata: Dataset[Row] = spark.read.format("csv").option("header", true).option("inferSchema", true).load("mydata.csv")
// CSV header: Time,Area,City
// CSV values: "2016-01","A1","NY"
//             "2016-01","AB","HK" etc

// ...somewhere in my aggregate:
def bufferEncoder: Encoder[Array[(String, Row)]] = ....
对于
数组中的内部元组
我可以写:

val rowEncoder = RowEncoder(mydata.schema)
Encoders.tuple(Encoders.STRING, rowEncoder)

但是如何为外部
数组
编写
编码器

您需要使用
行编码器
来获得完整的结构:

val enc = RowEncoder(StructType(Seq(
    StructField("data", ArrayType(
        StructType(Seq(StructField("k", StringType), 
        StructField("v", df.schema))))))))
并转换数据以反映这一点:

Row(Seq(Row(string, Row(...), Row(sting, Row(...))))

或者对所有字段使用静态编码器。

您能给出一个可重复的示例吗?
my.data
中有什么内容?我不确定是否理解您的答案。我已经能够转换单个
。我的问题是
数组