scala - 如何使用 Spark 在 Scala 中返回多列键和值对
问题描述
我想将下面的 RDD 转换为键值对,每个键都有两个值。第一列应该是键,第二列和第三列应该是值。如何使用 scala 中的 Case 类来执行转换?
scala> input
res31: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[60] at rdd at <console>:35
scala> input.take(5).foreach(println)
[Ace,Ball,null]
[Kids,Kids,null]
[Hardware,Hardware,null]
[Market,Market,Markets]
[Adventure,Adventure,null]
预期的 O/P:我期待一个非常像 Python 字典的键值对。一个键将保存多个值,因此这些值将是一个元组。一旦我们有了键值对,基于键 i 应该能够提取值。
例如
d = {key1: [val1, val2, val3....], key2: [valx, valy, valz, ...], ....}
d[key1][0]
给出 key1 的第一个值
希望我能清楚地表达我的要求
解决方案
您可以使用Tuple2
. 假设您希望输出为:
(Ace, (Ball, null))
(Kids, (Kids, null))
..
(Adventure, (Adventure, null))
您可以尝试以下方法:
val output = input.map(x => Tuple2(x.getString(0), (x.getString(1), x.getString(2))))
output.take(5).foreach(println)
推荐阅读
- python - 检查字典列表中是否已经存在值以及它是否更新了计数器
- python - 如何在 python 中用 mpmath 绘制图形?
- vuetify.js - 如果不正确,v-select 会自动触发
- java - 子路由器不能安装在确切的路径上
- python-3.x - python中的协程从未等待过错误
- javascript - 有没有办法使用 JavaScript 更改卡片文本?
- python-3.x - 如何从 OSX 中完全删除 python2,以便 Brew 安装 NEOVIM 并拥有最新版本的 Python
- ruby-on-rails - 无法访问在子域上运行的 Rails 应用程序
- c++ - 如何在 C++ 中使用二维数组创建矩阵输出模式
- python - 制作推荐地标列表:如何迭代 Dataframe 并执行功能?