学习bigdata和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次,而不是拆分3次,并且可以将split的元素串联或类似?
答案 0 :(得分:1)
使用 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()
答案 1 :(得分:0)
您可以先分割客户,然后调用另一个地图以形成客户名称,如下所示:
customers_data = customers.map(lambda x: x.split(","))
custname = customers_data.map(lambda x: (x[8], x[1] + " " + x[2]))