mgo*_*ser 4 cartesian-product cross-join apache-spark pyspark
我有一个庞大的字符串数据集,可以放入我的spark集群中的单个节点上的内存中.问题是它占用了单个节点的大部分内存.
这些ID长约30个字符.例如:
ids
O2LWk4MAbcrOCWo3IVM0GInelSXfcG
HbDckDXCye20kwu0gfeGpLGWnJ2yif
o43xSMBUJLOKDxkYEQbAEWk4aPQHkm
Run Code Online (Sandbox Code Playgroud)
我希望写入所有id对的列表.例如:
id1,id2
O2LWk4MAbcrOCWo3IVM0GInelSXfcG,HbDckDXCye20kwu0gfeGpLGWnJ2yif
O2LWk4MAbcrOCWo3IVM0GInelSXfcG,o43xSMBUJLOKDxkYEQbAEWk4aPQHkm
HbDckDXCye20kwu0gfeGpLGWnJ2yif,O2LWk4MAbcrOCWo3IVM0GInelSXfcG
# etc...
Run Code Online (Sandbox Code Playgroud)
所以我需要交叉加入数据集本身.我希望使用10节点集群在PySpark上执行此操作,但它需要内存效率.
Mar*_*usz 10
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8565 次 |
| 最近记录: |