【问题标题】:Scalding: Create list from column in Pipe烫伤:从管道中的列创建列表
【发布时间】:2017-07-08 02:29:56
【问题描述】:

我需要一个管道,该管道有一列带有关联值的标签,然后旋转该管道,以便每个标签都有一列,每列中的值都正确。例如,如果我有这个:

Id  Label Value 
1   Red   5
1   Blue  6
2   Red   7
2   Blue  8
3   Red   9
3   Blue  10

我需要把它变成这样:

ID Red Blue
1  5   6
2  7   8
3  9   10

我知道如何使用 pivot 命令执行此操作,但我必须明确知道标签的值。如何将“标签”列中的标签动态读取到一个列表中,然后我可以将其传递给数据透视命令?我尝试使用以下方式创建列表:

pipe.groupBy('id) {_.toList('label) }

,但我得到一个类型不匹配,说它找到了一个符号但正在期待(cascading.tuple.Fields,cascading.tuple.Fields)。此外,从在线阅读来看,听起来使用 toList 是不受欢迎的。 'label 中的事物数量是有限的并且不是那么大(可能是 30-50 项),但可能会有所不同,具体取决于我使用的数据样本。

您有任何建议都会很棒。非常感谢!

【问题讨论】:

    标签: scala scalding


    【解决方案1】:

    我认为你在正确的轨道上,你只需要将所需的值映射到符号:

    val newHeaders = lines
        .map(_.split(" "))
        .map(a=>a(1))
        .distinct
        .map(f=>Symbol(f))
        .toList
    

    出于性能原因,Execution 类型将帮助您与后续枢轴组合。

    请注意,我将 TypedPipe 用于 lines 变量。

    如果您希望您的代码超级简洁,您可以合并第 1 行和第 2 行,但这只是一种风格选择:

    map(_.split(" ")(1))
    

    【讨论】:

      【解决方案2】:

      尝试使用Execution 从数据中获取值列表。有关处决的更多信息:https://github.com/twitter/scalding/wiki/Calling-Scalding-from-inside-your-application

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-22
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多