我想在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开销。
请帮助。
答案 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必备。