0

我有dataframe几行。我可以dataframe使用以下代码循环遍历它:

for row in df.rdd.collect():

但这不会并行工作吗?所以我想要的是映射每一行并将其传递给 UDF 并根据行中的值返回另一个新的数据帧(来自数据库)。

我试过 df.rdd.map(lambda row:read_from_mongo(row,spark)).toDF()

但我得到了这个错误:

_pickle.PicklingError:无法序列化对象:异常:您似乎正试图从广播变量、操作或转换中引用 SparkContext。SparkContext 只能在驱动程序上使用,不能在它在工作人员上运行的代码中使用。有关详细信息,请参阅 SPARK-5063。

如何dataframe并行循环 a 并保持dataframe每一行的返回?

4

1 回答 1

0

创建的每个 Spark RDD 或 DataFrame 都与应用程序的 SparkContext 相关联,并且 SparkContext 只能在驱动程序代码中引用。您返回 DataFrame 的 UDF 尝试从工作人员而不是驱动程序引用 SparkContext。那么,为什么需要为每一行创建一个单独的 DataFrame?如果 - 您希望稍后将生成的 DataFrame 合并为一个。- 第一个 DataFrame 足够小。然后,您可以简单地收集 DataFrame 的内容并将其用作过滤器以从 Mongodb 返回行。对于并行性,您需要依靠您使用的连接器来连接到 Mongodb。

于 2019-12-29T14:53:53.773 回答