scala - read - ¿Cómo aplicar una función a una columna de un Spark DataFrame?
spark sql example (2)
Una forma es acceder a ellos utilizando el sql como a continuación.
df.registerTempTable("tab1")
val df2 = sqlContext.sql("select tk[0], tk[1] from tab1")
df2.show()
Para obtener el tamaño de la columna de matriz,
val df3 = sqlContext.sql("select size(tk) from tab1")
df3.show()
Si su versión Spark es anterior, puede usar HiveContext en lugar del contexto SQL de Spark.
También probaría algo que atraviese.
Supongamos que tenemos un Spark DataFrame
df.getClass
Class[_ <: org.apache.spark.sql.DataFrame] = class org.apache.spark.sql.DataFrame
con el siguiente esquema
df.printSchema
root
|-- rawFV: string (nullable = true)
|-- tk: array (nullable = true)
| |-- element: string (containsNull = true)
Dado que cada fila de la columna tk
es una matriz de cadenas, ¿cómo escribir una función de Scala que devolverá el número de elementos en cada fila?
No tiene que escribir una función personalizada porque hay una:
import org.apache.spark.sql.functions.size
df.select(size($"tk"))
Si realmente lo deseas, puedes escribir un udf
:
import org.apache.spark.sql.functions.udf
val size_ = udf((xs: Seq[String]) => xs.size)
o incluso crear una expresión personalizada, pero realmente no tiene sentido.