【发布时间】:2018-11-09 17:04:23
【问题描述】:
我正在使用 Spark SQL 从表中提取行。其中一些数据是重复出现的,我正在尝试计算出现的次数。本质上,我正在尝试执行基本的“字数统计”示例,但我的数据不是以下形式:(Word : String, Count : Int),而是有一行数据替换了单词/字符串。
更具体地说,我的数据看起来像:RDD[((row), count)],其中行是从 sql 表中提取的,包含字符串、双精度数、整数等。
它是RDD 形式,因为我想使用reduceByKey。请参阅:Avoid groupByKey。它是一个 (Key, Value) 对,有一个很长的键(来自 sql 数据库的某行),其值为“字数”。
我的应用正在这样做:
myDataframe
// Append a 1 to each row
.map(row => (row, 1))
// Convert to RDD so we can use the reduceByKey method
.rdd
// Add up the 1's corresponding to matching keys
.reduceByKey(_ + _)
//Filter by rows that show up more than 10 times
.filter(_._2 > 100)
...
现在假设我的行数据包含(string, double, int)。
这是我想将我的数据从RDD[((string, double, int), count)] 解包到RDD[(string, double, int, count)] 的地方,以便我最终可以将这些数据保存到另一个 SQL 表中。
有没有什么方法可以让我解压这个...嵌套元组...之类的内容?
我的解决方案是像这样“解包” RDD 的元素:
.map(row => (row._1._1, row._1._2, row._1._3, row._2))
但一定有更好的方法!如果我决定从行中获取更多元素,则必须修改此 .map() 调用。
谢谢!
【问题讨论】:
标签: sql scala apache-spark rdd flatten