【发布时间】:2015-04-25 14:07:37
【问题描述】:
我们使用 Scalding 进行 ETL 并将输出生成为带有分区的 Hive 表。因此,我们希望分区的目录名称类似于“state=CA”。我们使用 TemplatedTsv 如下:
pipe
// some other ETL
.map('STATE -> 'hdfs_state) { state: Int => "State=" + state }
.groupBy('hdfs_state) { _.pass }
.write(TemplatedTsv(baseOutputPath, "%s", 'hdfs_state,
writeHeader = false,
sinkMode = SinkMode.UPDATE,
fields = ('all except 'hdfs_state)))
我们采用来自How to bucket outputs in Scalding 的代码示例。 以下是我们遇到的两个问题:
- except IntelliJ 无法解决:我错过了一些导入吗?我们不想在“fields = ()”语句中显式输入所有字段,因为字段是从 groupBy 语句中的代码派生的。如果明确输入,它们很容易不同步。
- 这种方法看起来太老套了,因为我们正在创建一个额外的列,以便 Hive/Hcatalog 可以处理目录名称。我们想知道实现它的正确方法应该是什么?
非常感谢!
【问题讨论】:
标签: scalding