在Spark DataFrame项上迭代执行本地(驱动程序)代码

时间:2015-12-04 12:57:46

标签: apache-spark pyspark spark-dataframe

我正在使用Spark,Dataframes和Python。

假设我有一个非常庞大的数据帧,每一行都包含一些JPG图像作为二进制数据。我想构建某种浏览器来顺序显示每个图像。

我有一个 view 函数,它将一行作为输入,并执行以下操作:

def view(row):
    windows = popup_window_that_display_image(row.image)
    waitKey()
    destroy_window(window)

以下代码适用于spark-submit选项 - master local [*]

df = load_and_compute_dataframe(context, some_arguments)
df.foreach(view)

显然, view 函数无法在远程Spark执行程序上运行。因此上述代码在 yarn-client 模式下失败。

我可以使用以下代码在 yarn-client 模式下工作:

df = load_and_compute_dataframe(context, some_arguments)
data = df.limit(10).collect(); 
for x in data:
    view(w)

缺点是我只能收集一些物品。数据太大,不能同时获得超过10或100个项目。

所以我的问题是:

  • 是否有意在驱动程序本地执行某些DF / RDD操作而不是执行程序?
  • 从11日开始,是否有东西允许我从DF收集10件物品?我应该尝试添加一个" ID"列到我的DF并迭代它(丑陋)?
  • 实现此结果的其他任何方式?

感谢您的帮助!

0 个答案:

没有答案