我正在尝试使用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']]
有什么方法可以在火花中展平RDD吗?
答案 0 :(得分:2)
这里你不需要任何特定的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))