我有一个庞大的字符串数据集,可以放入我的spark集群中单个节点的内存中。问题是它占用了单个节点的大部分内存。
这些ID长约30个字符。例如:
ids
O2LWk4MAbcrOCWo3IVM0GInelSXfcG
HbDckDXCye20kwu0gfeGpLGWnJ2yif
o43xSMBUJLOKDxkYEQbAEWk4aPQHkm
我希望写一个包含所有id对的列表。例如:
id1,id2
O2LWk4MAbcrOCWo3IVM0GInelSXfcG,HbDckDXCye20kwu0gfeGpLGWnJ2yif
O2LWk4MAbcrOCWo3IVM0GInelSXfcG,o43xSMBUJLOKDxkYEQbAEWk4aPQHkm
HbDckDXCye20kwu0gfeGpLGWnJ2yif,O2LWk4MAbcrOCWo3IVM0GInelSXfcG
# etc...
所以我需要自己交叉加入数据集。我希望使用10节点集群在PySpark上执行此操作,但它需要内存效率。
答案 0 :(得分:8)
pySpark将轻松处理您的数据集并提高内存效率,但处理10 ^ 8 * 10 ^ 8条记录需要时间(这是交叉连接结果的估计大小)。请参阅示例代码:
from pyspark.sql.types import *
df = spark.read.csv('input.csv', header=True, schema=StructType([StructField('id', StringType())]))
df.withColumnRenamed('id', 'id1').crossJoin(df.withColumnRenamed('id', 'id2')).show()