【发布时间】:2015-06-05 00:54:07
【问题描述】:
我有一堆元组,它们是复合键和值的形式。例如,
tfile.collect() = [(('id1','pd1','t1'),5.0),
(('id2','pd2','t2'),6.0),
(('id1','pd1','t2'),7.5),
(('id1','pd1','t3'),8.1) ]
我想在这个集合上执行类似 sql 的操作,我可以根据 id[1..n] 或 pd[1..n] 聚合信息。我想使用 vanilla pyspark apis 而不是使用 SQLContext 来实现。 在我当前的实现中,我从一堆文件中读取并合并 RDD。
def readfile():
fr = range(6,23)
tfile = sc.union([sc.textFile(basepath+str(f)+".txt")
.map(lambda view: set_feature(view,f))
.reduceByKey(lambda a, b: a+b)
for f in fr])
return tfile
我打算创建一个聚合数组作为值。例如,
agg_tfile = [((id1,pd1),[5.0,7.5,8.1])]
其中 5.0,7.5,8.1 表示 [t1,t2,t3] 。我目前正在通过使用字典的香草 python 代码实现相同的目标。它适用于较小的数据集。但我担心这可能不适用于更大的数据集。有没有使用 pyspark apis 实现相同目标的有效方法?
【问题讨论】:
-
与
union相比,使用wholeTextFiles调用(如果PySpark中存在)加载所有文件更有效。 -
这是一个 Scala aggregate reduction by multiple keys 和一个 Python union reduction of multiple values
标签: python apache-spark pyspark