我们使用 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 中的代码示例。这是我们遇到的两个问题:
- 除了IntelliJ 无法解决:我错过了一些进口吗?我们不想在“fields = ()”语句中显式输入所有字段,因为字段是从 groupBy 语句中的代码派生的。如果明确输入,它们很容易不同步。
- 这种方法看起来太 hacky,因为我们正在创建一个额外的列,以便 Hive/Hcatalog 可以处理目录名称。我们想知道实现它的正确方法应该是什么?
非常感谢!