在方法/函数参数中创建动态对象



我正在使用以下内容生成orc文件

import org.apache.hadoop.io.Text;
import org.apache.hadoop.hive.ql.io.orc._;
val orcLine:OrcStruct = OrcUtils.createOrcStruct(
                        typeInfo,
                        new Text(value1),
                        new Text(value2),
                        new Text(value3),
                        new Text(value4),
                        new Text(value5));

但是,这里的挑战是有时我可能有 5 个值(值 1 ...值 5(,有时为 10(值 1 ...值 10( 有时是 20 (值 1 ...值 20( 取决于某些条件。

我怎样才能把这种动态行为带到这里?

就像如果值是 10 我应该有

val orcLine:OrcStruct = OrcUtils.createOrcStruct(
                        typeInfo,
                        new Text(value1),
                        new Text(value2),
                        new Text(value3),
                        new Text(value4),
                        new Text(value5),
                        new Text(value6),
                        new Text(value7),
                        new Text(value8),
                        new Text(value9),
                        new Text(value10));

我有时也可能有

val orcLine:OrcStruct = OrcUtils.createOrcStruct(
                       typeInfo,
                       new Text(value1),
                       new ShortWritable(Short.valueOf(value2)),
                       new LongWritable(Long.valueOf(value3)),
                       new DoubleWritable(Double.valueOf(value4)),
                       new FloatWritable(Float.valueOf(value5)));

我目前正在使用 Scala 2.11 版本。

任何帮助都非常感谢!

假设您的参数存储在列表中:

val params = List(
    new Text(value1),
    new ShortWritable(Short.valueOf(value2)),
    new LongWritable(Long.valueOf(value3)),
    new DoubleWritable(Double.valueOf(value4)),
    new FloatWritable(Float.valueOf(value5)))
)

正如您可能注意到的那样,OrcUtils.createOrcStruct将对象的可变参数列表作为第二个参数。

为了在 scala 中将列表作为 varargs 传递,您需要使用 :_* .它会在方法调用期间将您的列表"传播">为 varargs:

OrcUtils.createOrcStruct(typeInfo, params:_*)

相关内容

  • 没有找到相关文章

最新更新