值 avro 不是 org.apache.spark.sql.DataFrameReader 的成员
value avro is not a member of org.apache.spark.sql.DataFrameReader
我正在使用 cloudera 5.4.1 和 spark 1.3.0
这段代码是我写的
val path = "/input/"
val conf = new SparkConf()
.setAppName("Form Submissions")
val sc = new SparkContext(conf)
val sqlConf = new SQLContext(sc)
val df = sqlConf.read.avro(path)
df.foreach(println)
这是我的 sbt 文件
name := "SparkAvro"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies ++= Seq(
//"org.apache.spark" % "spark-core_2.10" % "1.2.0",
"org.apache.spark" % "spark-core_2.10" % "1.5.2" % "provided",
"org.apache.spark" % "spark-sql_2.10" % "1.5.2" % "provided",
"com.databricks" % "spark-avro_2.10" % "1.0.0"
)
mainClass in assembly := Some("com.abhi.SparkAvro")
当我构建此项目时,它失败并显示此错误消息
[error] /Users/ab/MyProjects/SparkAvro/src/main/scala/com/abhi/SparkAvro.scala:17:
value avro is not a member of org.apache.spark.sql.DataFrameReader
[error] val df = sqlConf.read.avro(input)
[error] ^
[error] one error found
因此,github 页面上的 Spark Avro 文档似乎适用于 2.0.1 版,而这些 API 不适用于 1.0 版的 Spark Avro。
我尝试在网上搜索,但找不到向我展示如何在 Spark Avro 1.0 上编写代码以及如何在 HDFS 上解析 Avro 文件的文档。
只需将该行替换为:
sqlConf.read.format("com.databricks.spark.avro").load(path)
原因是,如您所说,您 copy/pasted 来自 spark-avro wiki 的代码是针对版本 2.0.1 的。但是,如果您在 github 上切换到标签 1.0.0(或您正在使用的版本),它将向您显示与该特定版本相关的所有数据 - 包括文档。
在那种特定情况下,您会看到许多不同的方法来完成与您所做的相同的事情,但背后的原因是 Spark API 也在发生变化。请记住,Spark 发展得非常快,因此您会在网上看到很多使用不同方法的示例 - 而且您会经常看到它们已过时。
例如,在版本 1.0.0 的文档中,有对 .load(path,format) 的调用。根据 API,自 1.4.0 起已弃用 - 使用 read.load(...)
.
导入隐式转换也有效
import com.databricks.spark.avro._
我正在使用 cloudera 5.4.1 和 spark 1.3.0
这段代码是我写的
val path = "/input/"
val conf = new SparkConf()
.setAppName("Form Submissions")
val sc = new SparkContext(conf)
val sqlConf = new SQLContext(sc)
val df = sqlConf.read.avro(path)
df.foreach(println)
这是我的 sbt 文件
name := "SparkAvro"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies ++= Seq(
//"org.apache.spark" % "spark-core_2.10" % "1.2.0",
"org.apache.spark" % "spark-core_2.10" % "1.5.2" % "provided",
"org.apache.spark" % "spark-sql_2.10" % "1.5.2" % "provided",
"com.databricks" % "spark-avro_2.10" % "1.0.0"
)
mainClass in assembly := Some("com.abhi.SparkAvro")
当我构建此项目时,它失败并显示此错误消息
[error] /Users/ab/MyProjects/SparkAvro/src/main/scala/com/abhi/SparkAvro.scala:17:
value avro is not a member of org.apache.spark.sql.DataFrameReader
[error] val df = sqlConf.read.avro(input)
[error] ^
[error] one error found
因此,github 页面上的 Spark Avro 文档似乎适用于 2.0.1 版,而这些 API 不适用于 1.0 版的 Spark Avro。
我尝试在网上搜索,但找不到向我展示如何在 Spark Avro 1.0 上编写代码以及如何在 HDFS 上解析 Avro 文件的文档。
只需将该行替换为:
sqlConf.read.format("com.databricks.spark.avro").load(path)
原因是,如您所说,您 copy/pasted 来自 spark-avro wiki 的代码是针对版本 2.0.1 的。但是,如果您在 github 上切换到标签 1.0.0(或您正在使用的版本),它将向您显示与该特定版本相关的所有数据 - 包括文档。
在那种特定情况下,您会看到许多不同的方法来完成与您所做的相同的事情,但背后的原因是 Spark API 也在发生变化。请记住,Spark 发展得非常快,因此您会在网上看到很多使用不同方法的示例 - 而且您会经常看到它们已过时。
例如,在版本 1.0.0 的文档中,有对 .load(path,format) 的调用。根据 API,自 1.4.0 起已弃用 - 使用 read.load(...)
.
导入隐式转换也有效
import com.databricks.spark.avro._