Skip to main content
 首页 » 编程设计

python之在 PySpark 中展平 RDD

2024年10月24日47JeffreyZhao

我正在尝试使用 PySpark 处理数据。以下是我的示例代码:

rdd = sc.parallelize([[u'9', u'9', u'HF', u'63300001', u'IN HF', u'03/09/2004', u'9', u'HF'], [u'10', u'10', u'HF', u'63300001', u'IN HF', u'03/09/2004', u'9', u'HF']])  
 
out = rdd.map(lambda l : (l[0:3],str(l[3]).zfill(8)[:4],l[4:])) 
 
out.take(2) 
 
[([u'9', u'9', u'HF'], '6330', [u'IN HF', u'03/09/2004', u'9', u'HF']), ([u'10', u'10', u'HF'], '6330', [u'IN HF', u'03/09/2004', u'9', u'HF'])] 
 
expected output: 
[[u'9', u'9', u'HF', '6330', u'IN HF', u'03/09/2004', u'9', u'HF'], [u'10', u'10', u'HF', '6330', u'IN HF', u'03/09/2004', u'9', u'HF']] 

有什么方法可以在 spark 中展平 RDD 吗?

请您参考如下方法:

您在这里不需要任何特定于 Spark 的内容。这样的事情应该绰绰有余:

out = rdd.map(lambda l : (l[0:3] + [str(l[3]).zfill(8)[:4]] + l[4:]) 

不过,lambda 内部的解构可能更具可读性。我的意思是这样的:

rdd = sc.parallelize([(1, 2, 3), (4, 5, 6)]) 
rdd.map(lambda (x, y, z): (x, str(y).zfill(8), z))