apache-spark - 高效地将 Spark 中的数据帧发送到其他应用程序

标签 apache-spark apache-spark-sql

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

最佳答案

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

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

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

关于apache-spark - 高效地将 Spark 中的数据帧发送到其他应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454554/

相关文章:

java - 单行文件大约 4G 加载到 Spark

python - 如何将字符串变量分配给数据框名称

apache-spark - PySpark 在广泛的列中获得不同的值

hadoop - 指定 YARN 节点标签时 YARN 应用程序无法启动

apache-spark - PySpark:我需要重新缓存 DataFrame 吗?

java - 跨不同 JVM 的相同 SparkContext

scala - 在 spark-shell 中拆分多行

apache-spark - pyspark - 按元素聚合(求和)向量

apache-spark - Spark作业在多个执行器中运行时卡住

java - Spark join/groupby 数据集需要很多时间