如何解决如何向phoenix推送数据是大块头
我对这个领域很陌生。我正在尝试将数据从 spark 推送到 phoenix。数据规模超过100万。火花作业在 10 万条记录时运行良好,但在记录数超过 100 万时卡住。 我正在从 hive 加载数据
val hive_data = spark.sql(query)
推给凤凰
hive_data.write.format("org.apache.phoenix.spark").mode(SaveMode.Overwrite).options(collection.immutable.Map(
"zkUrl" -> zkUrl,"table" -> tableName)).save()
spark 是否在将整个数据帧推送到 phoenix 之前将其加载到内存中? 由于它能够处理较少数量的记录,因此问题是创建批次以上传到凤凰城。如何创建批量数据框?
解决方法
为我所面临的问题找到了临时解决方案。在将数据帧推送到 phoenix 之前,spark 试图将整个数据帧加载到内存中并进入暂停状态。所以下一个选择是分割数据帧并使用块。 由于顺序在我的情况下无关紧要,因此我使用 randomSplit 将数据帧分成多个部分
val splitDF = hive_data.randomSplit(Array(1,1,1))
然后循环遍历每个拆分并将拆分的数据帧推送到凤凰表。这需要花费大量时间,因此需要进一步努力寻找有效的解决方案。如果找到我会更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。