我正在尝试在脚本上创建,该脚本将以 avro 格式从文件创建管道,或者根据命令行中作为参数传递的值进行定界。然后我想拿那个管道并对其进行一些操作。我到目前为止是这样的:
val fileType = args("file_type").toString
def makeFile (types:String):RichPipe {
if (types == "avro") {UnpackedAvroSource(args("input")).addTrap(Tsv("errorFile.txt"))}
else if (types == "delim") {Csv(args("input"), separator = "\t", fields = schema).addTrap(Tsv(errors)) }
val fileSource = makeFile(fileType)
fileSource
.project('field1, 'field2, ....)
这会产生一个错误,上面写着:
error: type mismatch;
found : Unit
required: com.twitter.scalding.RichPipe
else if (types == "delim") {
^
one error found
似乎它在 else if 语句上抛出了一个错误,这真的没有意义,但是当它找到“单元”类型并期待 RichPipe 时,我无法弄清楚它试图读取什么。
或者,如果有更好的方法来解决这个问题,请自由提出建议。