1

我有 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 列中的数据。任何指针/建议???

4

1 回答 1

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合并到 master 分支后起作用。目前 Spark 中存在一个错误,元组被转换为具有两个名为的字段的结构value

于 2018-06-13T10:20:07.903 回答