我正在使用 Spark、Dataframes 和 Python。
假设我有一个相当大的数据框,每一行都包含一些 JPG 图像作为二进制数据。我想构建某种浏览器来按顺序显示每个图像。
我有一个视图函数,它以单行作为输入并执行以下操作:
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)
显然,视图函数不能在远程 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 操作在驱动程序上本地执行,而不是在 executors 上执行?
- 从 11 号开始,有什么东西可以让我从 DF 收集 10 件物品吗?我应该尝试向我的 DF 添加一个“ID”列并对其进行迭代(丑陋)吗?
- 还有其他方法可以达到这个结果吗?
感谢帮助 !