Apache spark 在Spark数据帧项上迭代执行本地(驱动程序)代码
我正在使用Spark、Dataframes和Python 假设我有一个相当大的数据帧,每行包含一些JPG图像作为二进制数据。我想建立一种浏览器来按顺序显示每个图像 我有一个视图函数,它将一行作为输入,并执行如下操作:Apache spark 在Spark数据帧项上迭代执行本地(驱动程序)代码,apache-spark,pyspark,spark-dataframe,Apache Spark,Pyspark,Spark Dataframe,我正在使用Spark、Dataframes和Python 假设我有一个相当大的数据帧,每行包含一些JPG图像作为二进制数据。我想建立一种浏览器来按顺序显示每个图像 我有一个视图函数,它将一行作为输入,并执行如下操作: def view(row): windows = popup_window_that_display_image(row.image) waitKey() destroy_window(window) 以下代码与spark提交选项--master loca
def view(row):
windows = popup_window_that_display_image(row.image)
waitKey()
destroy_window(window)
以下代码与spark提交选项--master local[*]配合使用效果良好:
显然,view函数不能在远程Spark执行器上运行。因此,上述代码在客户机模式下失败
我可以使用以下代码在客户机模式下工作:
缺点是我只能收集一些物品。数据太大,一次无法获取超过10或100个项目
因此,我的问题是:
- 有没有办法让一些DF/RDD操作在驱动程序上本地执行,而不是在执行器上执行
- 从11号开始,我可以从DF收集10件物品吗?我是否应该尝试向DF添加一个“ID”列并对其进行迭代(丑陋)
- 还有其他方法可以达到这个效果吗
谢谢你的帮助 您可以做的最好的事情是将数据保存到支持随机访问的系统(如您最喜欢的数据库)中,并从中读取数据。可以使用
ToLocalitator
,indexedRDD
或其他技巧,但使用Spark做这样的事情并没有真正的价值。是的,我想是这样的。问题是load_和_compute_数据帧是数据密集型的(在200个内核上只需几分钟),并且此函数变化很大。我希望避免必须从HDFS导出数据才能查看这些数据。
df = load_and_compute_dataframe(context, some_arguments)
df.foreach(view)
df = load_and_compute_dataframe(context, some_arguments)
data = df.limit(10).collect();
for x in data:
view(w)