Pyspark-如何为性能较差的给定算法实现并行性?
我有两个数据帧Pyspark-如何为性能较差的给定算法实现并行性?,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我有两个数据帧 df_1 = spark.createDataFrame( [(1, [(1), (4), (2) ,(3)])], ("id", "transactions") ) df_2 = spark.createDataFrame( [([ (1),(2),(3)], 2.0) ], ("items", "cost") ) 我有一个UDF来检查一个数组的所有元素是否都存在于另一个数组中。 我使用spark 2.2 @udf("boolean") def contains_all
df_1 = spark.createDataFrame(
[(1, [(1), (4), (2) ,(3)])],
("id", "transactions")
)
df_2 = spark.createDataFrame(
[([ (1),(2),(3)], 2.0) ],
("items", "cost")
)
我有一个UDF来检查一个数组的所有元素是否都存在于另一个数组中。
我使用spark 2.2
@udf("boolean")
def contains_all(x, y):
if x is not None and y is not None:
return set(y).issubset(set(x))
costs=(df_1
.crossJoin(df_2.groupBy("id", "transactions")
.agg(sum_(when(
contains_all("transactions", "items"), col("cost")
)).alias("score")))
因为其中一个数据帧(df_2)非常大,所以上面的代码非常慢(已经一天了,还在运行)
如何执行上述操作以并行运行?
我应该将数据帧转换为rdd吗?有没有办法加快速度?
这种类型的任何示例都很好。请提供一个完整的最小示例,以便我们可以尝试对其进行优化。这确实是一个难题。请注意,没有人对此发表评论。你改进了你的方法吗?@BluePhantom我在python中很少有针对这个问题的优化解决方案。但我很难将其转换为Pyspark。@BluePhantom如果至少有人告诉我如何划分任务并在多台机器上并行运行,那就太好了。请提供一个完整的最小示例,以便我们可以尝试对其进行优化。这确实是个难题。请注意,没有人对此发表评论。你改进了你的方法吗?@BluePhantom我在python中很少有针对这个问题的优化解决方案。但是我很难转换成Pyspark。@蓝色幻影如果至少有人告诉我如何划分任务并在多台机器上并行运行,那就太好了。