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

时间:2016-09-12 16:09:19

标签: apache-spark apache-spark-sql spark-dataframe

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

1 个答案:

答案 0 :(得分:2)

您可以尝试使用foreachPartition方法。像是:

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

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