7

尝试 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._

有用。

4

2 回答 2

4

您缺少一个隐式转换。

val sqlContext: org.apache.spark.sql.SQLContext = ???
import sqlContext._

然而,在 Spark 的最新(和受支持的)版本中,这种情况发生了变化。

于 2014-09-09T13:21:52.853 回答
4

Spark 2.0 在这里SparkSession取代了SQLContext.

Scala 的Symbol类型和 Spark SQL 的隐式转换Column在范围内不可用。

创建SparkSession实例后,请import务必在范围内包含隐式。

val spark: SparkSession = ...
import spark.implicits._

请参阅object的scaladocimplicits

它是自动导入的spark-shell,也是您不必执行此显式导入的原因。

于 2016-09-23T12:53:19.147 回答