使用 spark-avro 将 Avro 读入 spark
Reading Avro into spark using spark-avro
我无法使用 spark-avro 库读取 spark 文件。以下是我采取的步骤:
- 从以下位置获取罐子:http://mvnrepository.com/artifact/com.databricks/spark-avro_2.10/0.1
- 使用
spark-shell --jars avro/spark-avro_2.10-0.1.jar
调用了 spark-shell
已执行 git 自述文件中给出的命令:
import com.databricks.spark.avro._
import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val episodes = sqlContext.avroFile("episodes.avro")
操作 sqlContext.avroFile("episodes.avro") 失败并出现以下错误:
scala> val episodes = sqlContext.avroFile("episodes.avro")
java.lang.IncompatibleClassChangeError: class com.databricks.spark.avro.AvroRelation has interface org.apache.spark.sql.sources.TableScan as super class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
我的错。自述文件清楚地说:
Versions
Spark changed how it reads / writes data in 1.4, so please use the correct version of this dedicated for your spark version
1.3 -> 1.0.0
1.4+ -> 1.1.0-SNAPSHOT
我使用了 spark:1.3.1
和 spark-avro: 1.1.0
。当我使用 spark-avro: 1.0.0
时,它起作用了。
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
.appName(appName).master(master).getOrCreate()
val sqlContext = spark.sqlContext
val episodes = sqlContext.read.format("com.databricks.spark.avro")
.option("header","true")
.option("inferSchema","true")
.load("episodes.avro")
episodes.show(10)
由于 spark-avro 模块是外部的,所以 DataFrameReader 或 DataFrameWriter 中没有 .avro API。
要load/saveAvro格式的数据,需要指定数据源选项格式为avro。
示例:
val usersDF = spark.read.format("avro").load("examples/src/main/resources/users.avro")
usersDF.select("name", "favorite_color").write.format("avro").save("namesAndFavColors.avro")
我无法使用 spark-avro 库读取 spark 文件。以下是我采取的步骤:
- 从以下位置获取罐子:http://mvnrepository.com/artifact/com.databricks/spark-avro_2.10/0.1
- 使用
spark-shell --jars avro/spark-avro_2.10-0.1.jar
调用了 spark-shell
已执行 git 自述文件中给出的命令:
import com.databricks.spark.avro._ import org.apache.spark.sql.SQLContext val sqlContext = new SQLContext(sc) val episodes = sqlContext.avroFile("episodes.avro")
操作 sqlContext.avroFile("episodes.avro") 失败并出现以下错误:
scala> val episodes = sqlContext.avroFile("episodes.avro") java.lang.IncompatibleClassChangeError: class com.databricks.spark.avro.AvroRelation has interface org.apache.spark.sql.sources.TableScan as super class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access0(URLClassLoader.java:73) at java.net.URLClassLoader.run(URLClassLoader.java:368)
我的错。自述文件清楚地说:
Versions
Spark changed how it reads / writes data in 1.4, so please use the correct version of this dedicated for your spark version
1.3 -> 1.0.0
1.4+ -> 1.1.0-SNAPSHOT
我使用了 spark:1.3.1
和 spark-avro: 1.1.0
。当我使用 spark-avro: 1.0.0
时,它起作用了。
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
.appName(appName).master(master).getOrCreate()
val sqlContext = spark.sqlContext
val episodes = sqlContext.read.format("com.databricks.spark.avro")
.option("header","true")
.option("inferSchema","true")
.load("episodes.avro")
episodes.show(10)
由于 spark-avro 模块是外部的,所以 DataFrameReader 或 DataFrameWriter 中没有 .avro API。
要load/saveAvro格式的数据,需要指定数据源选项格式为avro。
示例:
val usersDF = spark.read.format("avro").load("examples/src/main/resources/users.avro")
usersDF.select("name", "favorite_color").write.format("avro").save("namesAndFavColors.avro")