apache-spark - Spark迭代算法UDF在每次迭代中被多次触发
问题描述
我在 Spark 中运行一个迭代循环。每次迭代都会生成一个数据框,然后该数据框将成为下一次迭代的输入。该程序包含一个在每次迭代中调用的 UDF。每次迭代后,我将值分配给新数据帧并将旧数据帧写入 hdfs。然后新的数据框成为我下一次迭代的输入。我观察到的问题是我的 UDF 被多次调用。DAG 每个时间步都会变长,UDF 会被多次调用。我该如何防止这种行为。由于性能原因,我不会使用缓存和/或检查点,同时我不能承受多次调用 UDF。
解决方案
哥们,我明白你的意思了!
您可以使用:
tesd1Df =test1Df.sqlContext.createDataFrame(test1Df.rdd, test1Df.schema).cache()
上述方式类似于检查点,但不是物理保存数据帧,而是缓存它。
它不会影响你的表现,我也遇到过同样的情况,我观察到了性能的大幅提升。
这种方式我也在 Spark ML 中使用,但问题是你需要注意你的内存空间容量,否则这种方法会起作用。
推荐阅读
- javascript - Eslint 警告不允许我推动回购
- mysql - 我想在 mysql 中使用 join in codeigniter 来分隔值
- spring - 在 spring + hibernate 中保存 creationTimestamp 和 updatedTime
- python - 从源代码构建时,如何在 Colab 中永久安装诸如 opencv 之类的库?
- javascript - 在 VSCode 中,JSHint 警告缺少分号
- javascript - 如何将键值对转换为新的键值对javascript
- android-studio - 关于 Gradle 和许可证的 Android Studio 错误
- action - 如何将操作发送到 redux-devtools 存储以从组件导入状态?
- zabbix - Zabbix 发件人。发现规则。主机原型
- javascript - 如何从html中删除不需要的文本