我想将Spark上下文中的数据帧发送到我的客户端应用程序。目前,我只是将数据帧转换为内存中的列表,并通过ZMQ将列表发送到客户端。但是调用Dataframe.collectAsList()需要很长时间。有没有办法提高这个过程的速度?或者我应该尝试其他方式将数据从Spark传递到其他应用程序?提前致谢。
答案 0 :(得分:2)
您可以尝试使用foreachPartition
方法。像是:
df.foreachPartition(iterator => {
val connection = createConnection(...)
iterator.foreach(row => connection.send(row))
connection.close()
}
在这种情况下,Spark将创建N个并行连接,其中N - 是已分配执行程序的数量。数据将直接从执行程序发送,无需将整个数据集收集到驱动程序。但要小心,您必须确保您的应用程序可以处理可能的负载。