SPARK中的JavaPairRDD到数据集<row>

时间:2018-06-13 09:47:46

标签: java apache-spark java-pair-rdd

我在JavaPairRDD中有格式的数据

JavaPairdRDD<Tuple2<String, Tuple2<String,String>>>

我尝试使用以下代码

 Encoder<Tuple2<String, Tuple2<String,String>>> encoder2 =
 Encoders.tuple(Encoders.STRING(), Encoders.tuple(Encoders.STRING(),Encoders.STRING()));
 Dataset<Row> userViolationsDetails = spark.createDataset(JavaPairRDD.toRDD(MY_RDD),encoder2).toDF("value1","value2");

但如何用3列生成数据集?由于上面代码的输出给我2列数据。任何指针/建议???

1 个答案:

答案 0 :(得分:0)

尝试运行printSchema - 你会看到,value2是一个复杂的类型。

有了这些信息,你可以写:

Dataset<Row> uvd = userViolationsDetails.selectExpr("value1", "value2._1 as value2", "value2._2 as value3")

value2._1表示当前“value2”字段中元组的第一个元素。我们覆盖value2字段只有一个值

请注意,在https://issues.apache.org/jira/browse/SPARK-24548合并到主分支后,这将起作用。目前Spark中存在一个错误,元组转换为struct,其中包含两个名为value

的字段