java - JavaPairRDD 到数据集在火花
问题描述
我有 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 列中的数据。任何指针/建议???
解决方案
尝试运行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
推荐阅读
- r - R中的堆叠直方图填充不堆叠
- android - Android 11 - 列出 Documents 文件夹中的文件
- java - Sqlite 查询不显示预先创建的数据库中的印地语单词?
- python - 为什么“a”比python中的“A”大?
- android - dump_coverage.cc:48] 检查失败:(java_agent_class) != nullptr
- angular - Angular Service Worker 完美无声升级
- javascript - 在 JS 中解构 JSON 对象
- typescript - 可以使用不同的约束错误子类型来实例化该类型
- android - 如何在 github 工作流中缓存 JDK 和 android sdk?
- javascript - 正则表达式替换字符串的中间字符