Pyspark-如何为给定的算法(否则性能较差)实现并行性?

时间:2019-04-30 11:23:43

标签: 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(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吗?有什么办法可以加快速度吗? 这种类型的任何例子都很好。

0 个答案:

没有答案