Spark中的迭代RDD / Dataframe处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark中的迭代RDD / Dataframe处理相关的知识,希望对你有一定的参考价值。
我的ADLA解决方案正在转变为Spark。我正在尝试找到适合U-SQL REDUCE表达式的替代品来启用:
- 读取逻辑分区并将信息存储在列表/字典/向量或内存中的其他数据结构中
- 应用需要多次迭代的逻辑
- 输出结果作为附加列与原始数据一起(原始行可能被部分消除或重复)
可能的任务示例:
- 输入数据集具有销售和退货交易及其ID和属性
- 该解决方案应该为每次退货找到最可能的销售
- 退货交易必须在销售交易之后发生,并且尽可能与销售交易相似(最佳匹配)
- 退货交易必须与一个销售交易完全相关联;销售交易可以链接到一个或没有退货交易 - 链接应该在新列
LinkedTransactionId
中捕获
解决方案可能可以通过groupByKey
命令实现,但我无法确定如何跨多行应用逻辑。我设法找到的所有示例都是内联函数的一些变体(通常是聚合 - 例如.map(t => (t._1, t._2.sum))
),它不需要来自同一分区的单个记录的信息。
任何人都可以分享类似解决方案的例子或指向正确的方向吗?
答案
这是一个可能的解决方案 - 非常感谢对迭代Spark / Scala解决方案的不同方法或示例的反馈和建议:
- 示例将读取每个客户的销售和贷方交易(
CustomerId
)并将每个客户作为单独的分区处理(外部mapPartition
循环) - 信用将映射到具有最接近分数的销售额(即最小分数差异 - 使用每个分区内的
foreach
内部循环) - 可变映射qazxsw poi阻止了每个事务的双重分配,并从进程中捕获更新
- 结果通过
trnMap
输出到最终数据集iterator
注意:在这种特殊情况下,使用迭代解决方案的窗口函数可以实现相同的结果,但目的是测试迭代逻辑本身)
dfOut2
以上是关于Spark中的迭代RDD / Dataframe处理的主要内容,如果未能解决你的问题,请参考以下文章
Spark DataFrame/RDD 中的前 N 个项目