Spark中的迭代RDD / Dataframe处理

问题描述 投票:0回答:1

我的ADLA解决方案正在转变为Spark。我正在尝试找到适合U-SQL REDUCE表达式的替代品来启用:

  1. 读取逻辑分区并将信息存储在列表/字典/向量或内存中的其他数据结构中
  2. 应用需要多次迭代的逻辑
  3. 输出结果作为附加列与原始数据一起(原始行可能被部分消除或重复)

可能的任务示例:

  • 输入数据集具有销售和退货交易及其ID和属性
  • 该解决方案应该为每次退货找到最可能的销售
  • 退货交易必须在销售交易之后发生,并且尽可能与销售交易相似(最佳匹配)
  • 退货交易必须与一个销售交易完全相关联;销售交易可以链接到一个或没有退货交易 - 链接应该在新列LinkedTransactionId中捕获

解决方案可能可以通过groupByKey命令实现,但我无法确定如何跨多行应用逻辑。我设法找到的所有示例都是内联函数的一些变体(通常是聚合 - 例如.map(t => (t._1, t._2.sum))),它不需要来自同一分区的单个记录的信息。

任何人都可以分享类似解决方案的例子或指向正确的方向吗?

apache-spark
1个回答
0
投票

这是一个可能的解决方案 - 非常感谢对迭代Spark / Scala解决方案的不同方法或示例的反馈和建议:

  • 示例将读取每个客户的销售和贷方交易(CustomerId)并将每个客户作为单独的分区处理(外部mapPartition循环)
  • 信用将映射到具有最接近分数的销售额(即最小分数差异 - 使用每个分区内的foreach内部循环)
  • 可变映射qazxsw poi阻止了每个事务的双重分配,并从进程中捕获更新
  • 结果通过trnMap输出到最终数据集iterator

注意:在这种特殊情况下,使用迭代解决方案的窗口函数可以实现相同的结果,但目的是测试迭代逻辑本身)

dfOut2
© www.soinside.com 2019 - 2024. All rights reserved.