首页 > 解决方案 > 有没有更好的方法来编写这个 pyspark 拆分代码?

问题描述

学习大数据和 pyspark。

我有 RDD 客户

[u'1,Richard,Hernandez,XXXXXXXXX,XXXXXXXXX,6303 Heather Plaza,Brownsville,TX,78521']

要获取客户编号和客户名字 + 姓氏元组,我有以下代码。

custname = customers.map(lambda x: (x.split(",")[8], x.split(",")[1] + " " +  x.split(",")[2]))

所以我的元组是(78521, (Richard Hernandez))

有没有更好的方法来编写上面的代码,即不是拆分3次,可以有一个拆分并且拆分的元素可以连接或类似的东西

标签: pythonpysparkrdd

解决方案


使用flatMap() + 列表理解:

>>> customers.flatMap(lambda x: [ (e[8], e[1]+' '+e[2]) for e in [x.split(",")] ]).collect()
[(u'78521', u'Richard Hernandez')]

顺便提一句。您当然可以为您的任务编写一个函数:

def myfunc1(x):
    arr = x.split(',')
    return (arr[8], arr[1]+' '+arr[2])

customers.map(myfunc1).collect()
# [(u'78521', u'Richard Hernandez')]

或者:

def myfunc2(arr): return (arr[8], arr[1]+' '+arr[2])
customers.map(lambda x: myfunc2(x.split(','))).collect()

或者:

customers.map(lambda x: (lambda y: (y[8], y[1]+' '+y[2]))(x.split(','))).collect()

推荐阅读