【问题标题】:Apache Spark Python GroupByKey or reduceByKey or combineByKeyApache Spark Python GroupByKey 或 reduceByKey 或 combineByKey
【发布时间】:2015-09-25 15:24:12
【问题描述】:

我正在尝试处理一个 3 GB 的文件。文件的结构是这样的,它包含多行,一组 n 行可以按一个特定的 Key 分组,每个 Key 出现在特定的位置

这是示例文件结构

abc123Key1asdas
abc124Key1asdas
abc126Key1asasd
abcw23Key2asdad
asdfsaKey2asdsa
....
.....
.....
abcasdKeynasdas
asfssdfKeynasda
asdaasdKeynsdfa

我想要实现的结构是

((Key1,(abc123Key1asdas,abc124Key1asdas,abc126Key1asasd)),(Key2,(abcw23Key2asdad,asdfsaKey2asdsa)),...(Keyn,(abcasdKeynasdas,asfssdfKeynasda,asdaasdKeynsdfa))

我正在尝试做这样的事情

lines = sc.textFile(fileName)
counts = lines.flatMap(lambda line: line.split('\n')).map(lambda line: (line[10:21],line))
        output = counts.combineByKey().collect()

谁能帮我实现我想做的事情?

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    只需将 combineByKey() 替换为 groupByKey() 就可以了。

    示例代码

    data = sc.parallelize(['abc123Key1asdas','abc123Key1asdas','abc123Key1asdas', 'abcw23Key2asdad', 'abcw23Key2asdad', 'abcasdKeynasdas', 'asfssdKeynasda', 'asdaasKeynsdfa'])
    data.map(lambda line: (line[6:10],line)).groupByKey().mapValues(list).collect()
    

    [('Key1', ['abc123Key1asdas', 'abc123Key1asdas', 'abc123Key1asdas']), ('Key2', ['abcw23Key2asdad', 'abcw23Key2asdad']), ('Keyn', ['abcasdKeynasdas', 'asfssdKeynasda', 'asdaasKeynsdfa'])]

    更多信息:http://spark.apache.org/docs/latest/api/python/pyspark.html?highlight=groupbykey#pyspark.RDD.groupByKey

    【讨论】:

    • groupByKey 会抛出内存不足异常
    猜你喜欢
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多