我在CentOS 6.2上安装了CDH5版本的1.0.0 Spark并且运行时没有错误。
尝试运行某些Spark SQL时遇到错误。我开始使用Spark shell ......
spark-shell --master spark://mysparkserver:7077
然后我在Spark SQL Programming Guide的编程指南中运行一个示例Scala脚本。
scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
scala> val vehicle = sc.textFile("/tmp/scala.csv")
scala> val schemaString = "year manufacturer model class engine cylinders fuel consumption clkm hlkm cmpg hmpg co2lyr co2gkm"
scala> import org.apache.spark.sql._
scala > val schema =
StructType
(
schemaString.split(" ").map(fieldName =>
StructField(fieldName, StringType, true))
)
但是导入声明似乎没有用?因为最后一行给出了错误
scala> StructType
<console>:14: error: not found: value StructType
StructType
^
我知道StructType
是org.apache.spark.sql.api.java.StructType
。如果我使用全名替换架构行中的StructType
,则错误会发生变化。
还有其他人遇到此错误吗?我缺少一个额外的步骤吗?
答案 0 :(得分:3)
您的问题是您正在阅读最新版Spark的编程指南,并在Spark 1.0.0上进行尝试。唉,{1.1}在Spark 1.1.0中引入,就像“以编程方式指定模式”一节一样。
因此,如果没有升级,您将无法执行此操作 - 除非您能够使用1.1.0指南“在RDD上运行SQL”中的技术。 0被称为“使用反射推断模式”。 (基本上,如果你能容忍一个固定的Schema。)
如果您查看各种文档网址,则希望将org.apache.spark.sql.api.java.StructType
替换为latest
。如有疑问,我想提出多个版本的API文档和搜索。我注意到,与javadoc一样,scaladoc有一个1.0.0
注释,用于在API文档中使这些信息更清晰,但它没有在Spark API文档中使用。
答案 1 :(得分:0)
即使在Spark 3.0.0中我也遇到了这个问题
请使用以下导入
scala>导入org.apache.spark.sql.types._
导入org.apache.spark.sql.types ._
scala> val模式= StructType(Array(StructField(“ language”,StringType,true),
| StructField(“ language”,StringType,true)))
模式:org.apache.spark.sql.types.StructType = StructType(StructField(language,StringType,true),StructField(language,StringType,true))