Spark: Split no es miembro de org.apache.spark.sql.Row

1 minuto de lectura

A continuación se muestra mi código de Spark 1.6. Estoy tratando de convertirlo a Spark 2.3 pero recibo un error al usar split.

Código chispa 1.6:

val file = spark.textFile(args(0))
val mapping = file.map(_.split('/t')).map(a => a(1))
mapping.saveAsTextFile(args(1))

Código chispa 2.3:

val file = spark.read.text(args(0))
val mapping = file.map(_.split('/t')).map(a => a(1)) //Getting Error Here
mapping.write.text(args(1))

Mensaje de error:

value split is not a member of org.apache.spark.sql.Row

A diferencia de spark.textFile que devuelve un RDD,
chispa.leer.texto devuelve un DataFrame que es esencialmente un RDD[Row]. podrías realizar map con una función parcial como se muestra en el siguiente ejemplo:

// /path/to/textfile:
// a    b   c
// d    e   f

import org.apache.spark.sql.Row

val df = spark.read.text("/path/to/textfile")

df.map{ case Row(s: String) => s.split("\\t") }.map(_(1)).show
// +-----+
// |value|
// +-----+
// |    b|
// |    e|
// +-----+

  • Tú también puedes df.as[String].map(line => line.split(...)).show().

    – Luis Miguel Mejía Suárez

    4 de agosto de 2019 a las 14:09

  • df.as[String] solo funciona si las cuerdas son pequeñas. Aunque hay un límite que se puede aumentar, esto no funciona bien con cadenas largas….

    –Juan Zamora

    27 de mayo de 2020 a las 18:11

¿Ha sido útil esta solución?