Spark:在没有com.databricks.spark.avro的情况下阅读avro文件

时间:2018-03-28 16:36:40

标签: apache-spark

我想在spark中读取avro文件但不幸的是我公司的集群没有com.databricks.spark.avro。

所以我试过

spark-shell --package com.databricks:spark-avro_2.10:0.1.  

这给出了未解决的依赖

import com.databricks.spark.avro._ is not supported.

也试过

spark-shell --jar spark-avro_2.11-3.2.0.jar

这不会打开shell。

spark.read.format("com.databricks.spark.avro").load("dirpath/*.avro") returns 
org.apache.spark.sql.AnalysisException: Failed to find data source: com.databricks.spark.avro. Please find an Avro package at http://spark.apache.org/third-party-projects.html;

spark.read.avro(" dirpath / * .avro")返回 错误:值avro不是org.apache.spark.sql.DataFrameReader的成员

这个表太大了(avro table在date / field1 / field2上分区并运行为spark.sql("")返回GC开销。

请帮助。

3 个答案:

答案 0 :(得分:1)

此问题发生的方式是您在群集上指定avro jar。如果将databrick jars放置为spark类路径的一部分,则它可用于驱动程序和执行程序,但是,如果您使用诸如spark launcher或Apache Livy之类的启动器,则必须明确将其添加为Spark Session的一部分。我像添加其他属性一样解决了问题

  sparkLauncher.setConf("spark.driver.extraClassPath",
                        "com.databricks-spark-avro_2.11-4.0.0.jar")
  sparkLauncher.setConf("spark.executor.extraClassPath",
                        "com.databricks-spark-avro_2.11-4.0.0.jar")  

这是防止Spark运行时SQL异常的安全方法

答案 1 :(得分:0)

在Spark Cluster中,您需要spark-avro jar文件。您可以从https://spark-packages.org/package/databricks/spark-avro下载它。下载后,将文件复制到SPARK_HOME/jars文件夹中。

答案 2 :(得分:-1)

首先,它不是--package --packages

其次,版本似乎不完整。

  

spark-shell --packages com.databricks:spark-avro_2.10:2.0.1

然后导入avro必备。