【问题标题】:Can I output a collection instead of a tuple in Scalding map method?我可以在 Scalding map 方法中输出集合而不是元组吗?
【发布时间】:2013-10-25 14:53:09
【问题描述】:

如果您想在 Scalding 中从一个较小的字段创建一个包含超过 22 个字段的管道,您会受到 Scala 元组的限制,它不能有超过 22 个项目。

有没有办法使用集合而不是元组?我想象以下示例中的内容,遗憾的是它不起作用:

input.read.mapTo('line -> aLotOfFields) { line: String =>
  (1 to 24).map(_.toString)
}.write(output)

【问题讨论】:

    标签: scala scalding


    【解决方案1】:

    其实你可以。它在常见问题解答中 - https://github.com/twitter/scalding/wiki/Frequently-asked-questions#what-if-i-have-more-than-22-fields-in-my-data-set

    val toFields = (1 to 24).map(f => Symbol("field_" + f)).toList
    
    input
      .read
      .mapTo('line -> toFields) { line: String =>
        new Tuple((1 to 24).map(_.toString).map(_.asInstanceOf[AnyRef]): _*)
    
      }
    

    最后一张地图(_.asInstanceOf[AnyRef]) 看起来很丑,所以如果你找到更好的解决方案,请告诉我。

    【讨论】:

      【解决方案2】:

      将您的元组包装到案例类中。与分别使用元组和集合相比,它还将使您的代码更具可读性和类型安全性。

      【讨论】:

        猜你喜欢
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多