Spark SQL с использованием программной схемы выдает странное исключение - PullRequest
0 голосов
/ 24 октября 2018

(проблема уже решена!)

Я пытаюсь использовать «Программирующее задание схемы» (http://spark.apache.org/docs/latest/sql-programming-guide.html). У меня есть этот файл my.txt в качестве ввода:

"A", 1, 2
"B", 2, 3
"B", 13,6
"C", 3, 4

Затем у меня есть программа spark для чтения и интерпретации:

val rowRdd = spark.sparkContext.textFile("my.txt")
.map(_.split(","))
.map(a => Row(a(0), a(1).trim.toInt, a(2).trim.toInt))
val schema = StructType("a b c".split(" ")
.map(f => StructField(f, StringType, nullable = true)))
spark.createDataFrame(rowRdd, schema).createOrReplaceTempView("people")
spark.sql("select * from people").show()

При работе с spark-submit выдает исключение:

java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: java.lang.Integer is not a valid external type for schema of string
if (assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object), 0, a), StringType), true) AS a#0
+- if (assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object).isNullAt) null else staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object), 0, a), StringType), true)
   :- assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object).isNullAt
   :  :- assertnotnull(input[0, org.apache.spark.sql.Row, true], top level row object)
   :  :  +- input[0, org.apache.spark.sql.Row, true]
   :  +- 0
... ...(many lines)

Фактически, в моем третьемУ меня была строка

Row(a(0), a(1).trim.toInt, a(2).trim.toInt))

Первый элемент - строка, я не преобразовал его в целое число. Но сообщение об ошибке: «java.lang.Integer не является допустимым внешним типом для схемы строки».

Итак, где я ошибся в своей программе и как ее исправить? Большое спасибо.


Решение проблемы, не должно содержать "" для ссылки на поля, изменения входного файлакак быть:

A, 1, 2
B, 2, 3
B, 13,6
C, 3, 4

Тогда все отлично работает!

...