我有一个包含几行的dataframe
。我可以使用以下代码遍历此dataframe
:
for row in df.rdd.collect():
但这不会并行工作吧?所以我想要的是映射每一行并将其传递给 UDF,并根据行中的值返回另一个新数据帧(来自数据库(。
我试过了df.rdd.map(lambda row:read_from_mongo(row,spark((.toDF((
但是我得到了这个错误:
_泡菜。酸洗错误: 无法序列化对象: 异常: 您似乎正在尝试从 广播变量、操作或转换。SparkContext只能 在驱动程序上使用,而不是在辅助角色上运行的代码中使用。欲了解更多信息 信息,请参阅 SPARK-5063。
如何并行循环dataframe
并保持每行返回的dataframe
?
创建的每个Spark RDD或DataFrame都与应用程序的SparkContext相关联,并且只能在驱动程序代码中引用SparkContext。返回数据帧的 UDF 尝试从工作线程而不是驱动程序引用 SparkContext。那么,为什么需要为每一行创建一个单独的数据帧呢?如果 - 您希望稍后将生成的数据帧合并为一个。 - 第一个数据帧足够小。 然后,您可以简单地收集数据帧的内容并将其用作过滤器,以从Mongodb返回行。在这里,为了并行,您需要依靠用于连接到Mongodb的连接器。