【问题标题】:Spark batch processing on driver驱动程序上的 Spark 批处理
【发布时间】:2022-01-21 04:43:42
【问题描述】:
我有一组 parquet 文件,我想将它们加载到数据库中,该数据库是 spark 中不受支持的接收器。与数据库通信的对象不能在诸如 foreach 之类的 spark 函数中使用,因为它无法序列化。我也不能使用 collect() 因为数据不适合内存。
spark 中是否有一个功能可以遍历驱动程序实例内存中的 RDD?
【问题讨论】:
标签:
java
apache-spark
apache-spark-sql
bigdata
【解决方案1】:
你不想批处理你想处理by partition:
ForeachParition 将允许您创建多个关闭器以将数据写入 [不支持的数据库]。您需要在内部启动与 ForeachPartition 代码块的数据库连接,以便它在每个执行程序内部创建连接。
(ForeachPartition 代码块中的代码在执行程序而不是驱动程序上运行。这将绕过尝试在驱动程序上启动连接,然后将该实时连接发送到所有执行程序。-->您不断收到的序列化错误.)
有很多很好的资源可以帮助解释闭包及其含义。但是如果你只是想深入了解它,只需在 ForeachPartition 代码块中启动数据库连接即可。