Динамическое создание объекта в аргументах метода / функции - PullRequest
1 голос
/ 19 апреля 2019

Я создаю файлы 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), а иногда и двадцать (значение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.

Любая помощь очень ценится!

1 Ответ

2 голосов
/ 19 апреля 2019

Допустим, ваши параметры хранятся в списке:

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 принимает переменный список объектов в качестве второго аргумента.

Чтобы передать список как varargs в scala, вам нужно использовать :_*. "распространит" ваш список как varargs во время вызова метода:

OrcUtils.createOrcStruct(typeInfo, params:_*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...