Apache Spark Python GroupByKey或reduceByKey或combineByKey

2024-10-04 11:21:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是示例文件结构

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

我要实现的结构是

^{pr2}$

我正试着做这样的事

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

有人能帮我实现我的目标吗?在


Tags: 文件lambda示例line结构linescountsasdfsakey2asdsa
1条回答
网友
1楼 · 发布于 2024-10-04 11:21:56

只需将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

相关问题 更多 >