Не идти по дороге .filter
, так как я не вижу там фокуса.
Для .transform
- преобразование фрейма данных на уровне DF
- преобразование в массиве DF в версии 2.4
- преобразование в массиве DF в версии 3
следующее:
преобразование кадра данных
Из официальных документов https://kb.databricks.com/data/chained-transformations.html преобразование в DF может закончиться как спагетти. Здесь мнения могут отличаться.
Это, как они говорят, беспорядок:
...
def inc(i: Int) = i + 1
val tmp0 = func0(inc, 3)(testDf)
val tmp1 = func1(1)(tmp0)
val tmp2 = func2(2)(tmp1)
val res = tmp2.withColumn("col3", expr("col2 + 3"))
по сравнению с:
val res = testDf.transform(func0(inc, 4))
.transform(func1(1))
.transform(func2(2))
.withColumn("col3", expr("col2 + 3"))
преобразование с помощью лямбда-функции в массиве DF в версии 2.4, для которой требуется комбинация select и expr
import org.apache.spark.sql.functions._
val df = Seq(Seq(Array(1,999),Array(2,9999)),
Seq(Array(10,888),Array(20,8888))).toDF("c1")
val df2 = df.select(expr("transform(c1, x -> x[1])").as("last_vals"))
преобразование с лямбда-функцией новая функция массива в DF в версии 3 с использованием withColumn
import org. apache .spark. sql .functions._ import org. apache .spark. sql ._
val df = Seq(
(Array("New York", "Seattle")),
(Array("Barcelona", "Bangalore"))
).toDF("cities")
val df2 = df.withColumn("fun_cities", transform(col("cities"),
(col: Column) => concat(col, lit(" is fun!"))))
Попробуйте их.
Заключительное примечание и отличная точка поднята (от https://mungingdata.com/spark-3/array-exists-forall-transform-aggregate-zip_with/):
преобразование работает аналогично функции карты в Scala. Я не уверен, почему они решили назвать эту функцию преобразованием ... Я думаю, что имя array_map было бы более подходящим, особенно потому, что функция Dataset # transform обычно используется для цепочки преобразований DataFrame.
Update
Если вы хотите использовать% sql или подход отображения для функций высшего порядка, обратитесь к этому: https://docs.databricks.com/delta/data-transformation/higher-order-lambda-functions.html