尝试使用Spark SQL的示例,除非需要表达式,否则它们似乎运行良好:
scala> val teenagers = people.where('age >= 10).where('age <= 19).select('name)
<console>:23: error: value >= is not a member of Symbol
val teenagers = people.where('age >= 10).where('age <= 19).select('name)
scala> val teenagers = people.select('name)
<console>:23: error: type mismatch;
found : Symbol
required: org.apache.spark.sql.catalyst.expressions.Expression
val teenagers = people.select('name)
似乎我需要一个没有记录的导入。
如果我批量导入所有内容
import org.apache.spark.sql.catalyst.analysis._
import org.apache.spark.sql.catalyst.dsl._
import org.apache.spark.sql.catalyst.errors._
import org.apache.spark.sql.catalyst.expressions._
import org.apache.spark.sql.catalyst.plans.logical._
import org.apache.spark.sql.catalyst.rules._
import org.apache.spark.sql.catalyst.types._
import org.apache.spark.sql.catalyst.util._
import org.apache.spark.sql.execution
import org.apache.spark.sql.hive._
编辑:......和
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
它有效。
答案 0 :(得分:4)
您缺少隐式转换。
val sqlContext: org.apache.spark.sql.SQLContext = ???
import sqlContext._
然而,最近(并支持)版本的Spark已经发生了变化。
答案 1 :(得分:4)
Spark 2.0&#39;这里SparkSession取代了SQLContext
。
Scala的Symbol
类型和Spark SQL Column
的隐式转换在范围内不可用。
在您创建了SparkSession
个实例之后,执行import
以确定范围内的含义。
val spark: SparkSession = ...
import spark.implicits._
请参阅scaladoc of implicits
object。
它会自动导入spark-shell
,并且您无需进行此明确导入。