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

尼克:

我正在使用以下方法生成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版。

任何帮助深表感谢!

KrzysztofAtłasik:

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

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:_*)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章