Сбор нескольких столбцов фрейма данных в виде списка кортежей [Spark Scala] - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующий файл sampleDF DataFrame в Spark Scala:

+-------+--------+------------------
|col1   |    col2|             col3|
+-------+--------+------------------
|    200|20200218|batched-202002180|
|    207|20200218|batched-202002190|
+-------+--------+------------------

Теперь я собираю значения для одного столбца, выполняя следующую операцию в Spark: что дает следующее o / p:

scala> val result = newDF.select("col3").collect.map(row => row(0).toString)
result: Array[String] = Array(batched-202002180, batched-202002190)

Теперь, как мне также выбрать два других столбца col1 и col2 и собрать все три столбца в виде массива кортежей? Для краткости я показал только 3 столбца в приведенном выше DF. Мы можем ожидать, что будет более трех столбцов.

Ожидаемый результат:

Array((200, 20200218, "batched-202002180"), (207, 20200218, "batched-202002190"))

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Вы можете сделать то же самое, что и ниже

newDF.map(r => (r.getAs[Long](0),r.getAs[Long](1),r.getAs[String](2))).collect()

Дает вам Array[(Long, Long, String)]

Если вы хотите преобразовать в String, вы можете использовать

val result = newDF.select(cols.head, cols.tail: _*).map(r => (r.getLong(0).toString,r.getLong(1).toString,r.getString(2))).collect()

Will дать вам Array[(String, String, String)]

1 голос
/ 28 мая 2020

Без преобразования в rdd. Пожалуйста, проверьте код ниже.

scala> df
.withColumn("col1","col1".cast("long"))
.withColumn("col2","col2".cast("long")).show(false)
+----+--------+-----------------+
|col1|col2    |col3             |
+----+--------+-----------------+
|200 |20200218|batched-202002180|
|207 |20200218|batched-202002190|
+----+--------+-----------------+


scala> df.map(r => (r.getAs[Long](0),r.getAs[Long](1),r.getAs[String](2))).collect()
res229: Array[(Long, Long, String)] = Array((200,20200218,batched-202002180), (207,20200218,batched-202002190))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...