Spark 2.0缺少spark implicits。

33

使用Spark 2.0,我发现可以将一行的数据框转换为case类的数据框。当我尝试这样做时,我看到一条消息,要求导入spark.implicits._。我的问题是Intellij没有识别它作为有效的导入语句,我想知道是否已经更改了位置而消息没有更新,或者我在构建设置中没有正确的包。这是我的build.sbt

libraryDependencies ++= Seq(
  "org.mongodb.spark" % "mongo-spark-connector_2.11" % "2.0.0-rc0",
  "org.apache.spark" % "spark-core_2.11" % "2.0.0",
  "org.apache.spark" % "spark-sql_2.11" % "2.0.0"
)
2个回答

91

没有名为spark.implicits的程序包。

这里的spark指的是SparkSession。如果您在REPL中,会话已定义为spark,因此只需键入:

import spark.implicits._
如果您在代码中定义了自己的SparkSession,那么请相应地进行调整。
val mySpark = SparkSession
  .builder()
  .appName("Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()

// For implicit conversions like converting RDDs to DataFrames
import mySpark.implicits._

如果我没有SparkSession怎么办?也就是说,我有一个接受数据集的方法,我想提供一些测试数据而不创建会话。 - Uko
3
您可以从数据集中获取会话(session)。将其存储在变量(val)中,然后使用该变量进行导入(import)。 - marios

13

SparkSession使用spark标识符。 这就是引起混淆的原因。 如果您像这样创建它,

val ss = SparkSession
  .builder()
  .appName("test")
  .master("local[2]")
  .getOrCreate()

导入隐式转换的正确方式是:

import ss.implicits._

如果这有帮助,请告诉我。干杯。


我如何在没有 import spark.implicits._ 的情况下将我的RDD转换为DataFrame?我需要类似于 .toDF 方法的东西,但是不需要 spark.implicits - João Paraná
2
如果你有一个Rdd[row],你可以使用spark.createDataFrame(rdd)。 - Chitral Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接