有效地将 Spark 中的数据帧发送到其他应用程序

Efficiently send dataframe in Spark to other application

我想将 Spark 上下文中的数据帧发送到我的客户端应用程序。目前,我只是将数据帧转换为内存中的列表,然后通过 ZMQ 将列表发送给客户端。但是调用 Dataframe.collectAsList() 会花费很多时间。有什么办法可以提高这个过程的速度吗?或者我应该尝试其他方式将数据从 Spark 传递到其他应用程序吗?提前致谢。

您可以尝试使用foreachPartition方法。比如:

df.foreachPartition(iterator => {
  val connection = createConnection(...)
  iterator.foreach(row => connection.send(row))
  connection.close()
}

在这种情况下,Spark 将创建 N 个并行连接,其中 N - 是分配的执行程序的数量。数据将直接从执行器发送,无需将整个数据集收集到驱动程序。但要小心,您必须确保您的应用程序能够处理可能的负载。