Получить значения одного столбца в виде плоского списка в Apache spark, используя java - PullRequest
0 голосов
/ 06 апреля 2020

Я новичок в Java и Apache spark и пытаюсь выяснить, как получить значения одного столбца из набора данных в spark в виде плоского списка.

Dataset<Row> sampleData = sparkSession.read()
                          .....
                          .option("query", "SELECT COLUMN1, column2 from table1")
                          .load();

List<Row> columnsList = sampleData.select("COLUMN1")
    .where(sampleData.col("COLUMN1").isNotNull()).collectAsList();

String result = StringUtils.join(columnsList, ", ");
// Result I am getting is
[15230321], [15306791], [15325784], [15323326], [15288338], [15322001], [15307950], [15298286], [15327223]
// What i want is":
15230321, 15306791......

Как мне добиться этого в свечах, используя java?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Я вставляю ответ в Scala. Вы можете преобразовать его в Java, так как доступны онлайн-инструменты.

Также я не создаю Строковый результат так, как вы указали, потому что это потребует создания таблицы и выполнения запроса в соответствии с ваш процесс, но я реплицирую проблемную переменную напрямую, используя

import org.apache.spark.sql.Row    
val a = List(Row("123"),Row("222"),Row("333"))

Печать дает мне

List([123], [222], [333])

Поэтому примените простую операцию карты вместе с методом mkString, чтобы сгладить список

 a.map(x => x.mkString(","))

дает

List(123, 222, 333) which I assume is your expectation. 

Дайте мне знать, если это решит вашу проблему.

1 голос
/ 06 апреля 2020

Искровая строка может быть преобразована в строку с помощью кодировщиков:

    List<String> result = sampleData.select("COLUMN1").as(Encoders.STRING()).collectAsList();
...