Подтвердить что ты не робот

Spark SQL Stackoverflow

Я новичок в искро и искрах sql, и я пытался сделать пример, который находится на сайте Spark SQL, просто простой SQL-запрос после загрузки схемы и данных из каталога файлов JSON, например:

import sqlContext.createSchemaRDD
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val path = "/home/shaza90/Desktop/tweets_1428981780000"
val tweet = sqlContext.jsonFile(path).cache()

tweet.registerTempTable("tweet")
tweet.printSchema() //This one works fine


val texts = sqlContext.sql("SELECT tweet.text FROM tweet").collect().foreach(println) 

Исключением, которое я получаю, является этот:

java.lang.StackOverflowError

    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1.apply(Parsers.scala:254)
at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222)

Обновить

Я могу выполнить select * from tweet, но всякий раз, когда я использую имя столбца вместо *, я получаю ошибку.

Любой совет?

4b9b3361

Ответ 1

Это SPARK-5009 и исправлено в Apache Spark 1.3.0.

Проблема заключалась в том, что для распознавания ключевых слов (например, SELECT) в любом случае в рекурсивной функции генерировались все возможные комбинации в верхнем и нижнем регистре (например, SELECT). Эта рекурсия приведет к StackOverflowError, который вы видите, если ключевое слово было достаточно длинным, а размер стека достаточно мал. (Это говорит о том, что если обновление до Apache Spark 1.3.0 или более поздней версии не является вариантом, вы можете использовать -Xss для увеличения размера стека JVM в качестве обходного пути.)