Spark scala dataframe получает значение для каждой строки и присваивает переменным - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть кадр данных, как показано ниже:

val df = spark. sql ("выбрать * из таблицы")

row1 | row2 | row3

A1 , B1, C1

A2, B2, C2

A3, B3, C3

я хочу выполнить итерацию для l oop, чтобы получить такие значения:

val value1 = "A1"

val value2 = "B1"

val value3 = "C1"

функция (значение1, значение2, значение3)

Пожалуйста, помогите мне.

выделенный текст

1 Ответ

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

У вас есть 2 варианта:

  • Решение 1- Ваши данные большие, поэтому вы должны придерживаться данных. Таким образом, чтобы применить функцию к каждой строке. Мы должны определить UDF.

  • Решение 2- Ваши данные невелики, затем вы можете собрать данные на машине-драйвере и затем выполнить итерацию с картой.

Пример:

val df = Seq((1,2,3), (4,5,6)).toDF("a", "b", "c")
def sum(a: Int, b: Int, c: Int) = a+b+c

// Solution 1
import org.apache.spark.sql.Row
val myUDF = udf((r: Row) => sum(r.getAs[Int](0), r.getAs[Int](1), r.getAs[Int](2)))

df.select(myUDF(struct($"a", $"b", $"c")).as("sum")).show

//Solution 2
df.collect.map(r=> sum(r.getAs[Int](0), r.getAs[Int](1), r.getAs[Int](2))) 

Выход для обоих случаев:

+---+
|sum|
+---+
|  6|
| 15|
+---+

РЕДАКТИРОВАТЬ:

val myUDF = udf((r: Row) => {
  val value1 = r.getAs[Int](0)
  val value2 = r.getAs[Int](1)
  val value3 = r.getAs[Int](2)

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