为什么在sql架构中创建“错误:未找到:值StructType”?

时间:2014-09-13 08:07:30

标签: sql scala apache-spark

我在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
              ^

我知道StructTypeorg.apache.spark.sql.api.java.StructType。如果我使用全名替换架构行中的StructType,则错误会发生变化。

还有其他人遇到此错误吗?我缺少一个额外的步骤吗?

2 个答案:

答案 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))