Spark SQL Stackoverflow

Lis*_*isa 11 apache-spark apache-spark-sql

我是spark和spark sql的新手,我试图在Spark SQL网站上创建示例,在从JSON文件目录加载模式和数据后只是一个简单的SQL查询,如下所示:

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) 
Run Code Online (Sandbox Code Playgroud)

我得到的例外就是这个:

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)
Run Code Online (Sandbox Code Playgroud)

更新

我能够执行,select * from tweet但每当我使用列名而不是*我得到错误.

任何建议?

Dan*_*bos 10

这是SPARK-5009,已在Apache Spark 1.3.0中修复.

问题是,在SELECT任何情况下识别关键字(如),所有可能的大写/小写组合(如seLeCT)都是在递归函数中生成的.StackOverflowError如果关键字足够长并且堆栈大小足够小,那么这种递归将导致您看到.(这表明如果不能选择升级到Apache Spark 1.3.0或更高版本,则可以使用-Xss增加JVM堆栈大小作为解决方法.)

  • 这要归功于stholzm发现SPARK-4208和Sean Owen在不到一个小时前将其作为SPARK-5009的副本关闭:).`-Xss`是一个`java`命令行标志.例如`-Xss4M`将堆栈大小设置为4 MB(我想这应该足够了).如果你使用`spark-submit`启动Spark应用程序,我认为你需要使用`--conf`标志来传递这个另一个标志.请参阅http://stackoverflow.com/questions/28166667/how-to-pass-d-parameter-or-environment-variable-to-spark-job. (2认同)