Pyspark按分区

时间:2017-01-12 20:09:01

标签: apache-spark pyspark spark-dataframe

我的数据框格式如下:

id | product
-------------
1  | A
1  | B
1  | C
2  | A
3  | A
3  | C 

我想要完成的是一个2列数据帧输出,其中每个ID有一行,每个产品拥有一个数组。我用mapPartitions()尝试了一些代码,但是我得到了关于无法推断架构的错误。我知道我必须在地图功能中产生一些东西,但我似乎无法弄明白。

使用Spark 1.6

修改

如果其他人有这个问题,我实际上使用combineByKey()来解决这个问题: https://stackoverflow.com/a/27043562/1181412

它提供了更灵活的工作方式

1 个答案:

答案 0 :(得分:0)

有点笨重,但有效

a = sqlContext.createDataFrame(sc.parallelize([
            (1, 'A'), (1, 'B'), (1, 'C'), 
            (2, 'A'), 
            (3, 'A'), (3, 'C')]), ['id', 'product']) 

sqlContext.createDataFrame(
    a.rdd.reduceByKey(lambda x, y: x + ',' + y), 
    ['id', 'products']).show()