Pypark处理文本fi

2024-09-29 01:29:13 发布

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

我有一个这样的文件,我在PythonRDD中读过。在

[(u'id1', u'11|12|13|14|15|16|17|18|,21|22|23|24|25|26|27|28|), (u'id2', u'31|32|33|34|35|36|37|38|,41|42|43|44|45|46|47|28|)]

表示:RDD是一个pairRDD,其中每个键都是一个用户id(id1,id2),每个值有多个记录(用逗号分隔),每个记录有多个项(用管道分隔)

我想减少文件,这样每个id:(id1和id2)将发出与记录数相同的行数,其中user id作为键,一些第7个字段/5个字段,第6个字段作为值

^{pr2}$

感谢任何帮助


Tags: 文件用户id管道记录逗号id2rdd
1条回答
网友
1楼 · 发布于 2024-09-29 01:29:13

试试这样的方法(平面图是诀窍):

input=[(u'id1', u'11|12|13|14|15|16|17|18|,21|22|23|24|25|26|27|28|'), (u'id2', u'31|32|33|34|35|36|37|38|,41|42|43|44|45|46|47|28|')]
inputRdd=sc.parallelize(input)

def splitAtPipe(value):
  valueParts=value.split('|')
  return (valueParts[6]+"/"+valueParts[4],valueParts[5])

inputRdd.flatMapValues(lambda data: data.split(","))
  .mapValues(splitAtPipe)
  .map(lambda (idx, (data1, data2)): (idx, data1, data2))
  .collect()

# Result
# [(u'id1', u'17/15', u'16'), (u'id1', u'27/25', u'26'), (u'id2', u'37/35', u'36'), (u'id2', u'47/45', u'46')]

相关问题 更多 >