(проблема уже решена!)
Я пытаюсь использовать «Программирующее задание схемы» (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
Тогда все отлично работает!