Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PySpark中展平RDD_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 在PySpark中展平RDD

Python 在PySpark中展平RDD,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在尝试使用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(

我正在尝试使用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))

谢谢你的回复。列表包含250多个元素,我使用了8个元素作为示例。有没有更好的方法来调用lambda函数中的所有元素?在我看来,保持长列表和切片只是自找麻烦。我建议使用字典、自定义类或Spark数据帧。在Python3中,有使用
*
的高级解构选项。