Как сделать Split на RDD типа Row в Spark, используя Scala - PullRequest
0 голосов
/ 24 октября 2018

У меня есть файл json в HDFS, я прочитал его:

var data = sqlContext.read.json("/.....")

Это схема, приведенная ниже:

 |-- @timestamp: string (nullable = true)
 |-- beat: struct (nullable = true)
 |    |-- hostname: string (nullable = true)
 |    |-- name: string (nullable = true)
 |    |-- version: string (nullable = true)
 |-- fields: struct (nullable = true)
 |    |-- env: string (nullable = true)
 |    |-- env2: string (nullable = true)
 |    |-- env3: struct (nullable = true)
 |    |    |-- format: string (nullable = true)
 |    |    |-- name: string (nullable = true)
 |    |    |-- version: double (nullable = true)
 |-- input_type: string (nullable = true)
 |-- text: string (nullable = true)

Я хочу сделать разделение поля text, я пробовал:

var myRDD = data.select("text").rdd

var split_myRDD = myRDD.map(ligne => ligne.split("|"))

Не работает: ошибка: разделение значений не является членом org.apache.spark.sql.Row

Кто-то может сказать мне, в чем ошибка?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Когда вы читаете ваш JSON, полученный объект является DataFrame.Когда вы преобразуете Dataframe в RDD, у вас будет массив [Row].Класс строк описывает строку из вашего Dataframe и имеет ту же схему, что и ваш DataFrame.Чтобы иметь возможность взять элемент из строки, вы должны сделать это:

myRDD
  .map(row => row.getString(row.fieldIndex("text")).split("|"))
0 голосов
/ 24 октября 2018

Для этого вам не нужно конвертировать в RDD.Вы можете использовать функцию разделения в DF.Код будет выглядеть следующим образом.

df.select("text")
  .withColumn("text_split", split(col("text"), "\\|"))

Вы также можете использовать RDD, если есть какая-то особая необходимость, и использовать "\\ |"разделить текст.Надеюсь, это поможет.

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