Почему следующая строка не срабатывает в искре и как я могу это исправить? - PullRequest
0 голосов
/ 06 мая 2019
sc.parallelize((1 to 10).map(i => if(i % 2 == 0) Some(i) else null)).toDF()

Эта строка завершается с ошибкой:

java.lang.ClassCastException: org.apache.spark.sql.types.IntegerType$ cannot be cast to org.apache.spark.sql.types.StructType
      at org.apache.spark.sql.SQLContext.createDataFrame(SQLContext.scala:414)
      at org.apache.spark.sql.SQLImplicits.rddToDataFrameHolder(SQLImplicits.scala:155)
      ... 50 elided

Я пытаюсь понять, почему он не работает и как я могу это исправить.

Ответы [ 3 ]

2 голосов
/ 06 мая 2019

Scala Int не может быть нулевым.Поэтому для создания фрейма данных искры, содержащего столбец int со значениями NULL, у вас есть два варианта:

// either use Option[Int], whose "null value" is None and not null
sc.parallelize((1 to 10).map(i => if(i % 2 == 0) Some(i) else None)).toDF()

// or use java Integers
sc.parallelize((1 to 10).map(i => if(i % 2 == 0) new Integer(i) else null)).toDF()

NB1: вы можете быть более компактными с импликатами искры:

import spark.implicits._
(1 to 10).map(i => if(i % 2 == 0) Some(i) else None).toDF()

NB2: В вашем случае вы также можете использовать функцию range:

spark.range(1, 11).select(when('id % 2 ===0, 'id).otherwise(0) as "value")
0 голосов
/ 06 мая 2019
sc.parallelize((1 to 10).map(i => if(i % 2 == 0) Some(i) else None)).toDF()

Значение параметра NULL равно Нет

https://www.scala -lang.org / api / current / scala / Option.html

0 голосов
/ 06 мая 2019

Вы пытаетесь отобразить целочисленные значения непосредственно в DataFrame, что является возможной ошибкой, поэтому она выдает ошибку приведения, ошибку приведения типа. Сначала попробуйте собрать выходные данные, а затем попытаться сопоставить их с кадром данных.

собирать значения в первую очередь в переменной, вызывая распараллеленное задание .collect ()

посмотрите примерно так - это поможет сопоставить значения со столбцами df, которые вы пытаетесь создать.

val someDF = Seq ( (8, "летучая мышь"), (64, «мышь»), (-27, "конь") ) .toDF ("число", "слово")

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