Как прочитать файл Avro в spark2-shell в Spark2.4? - PullRequest
1 голос
/ 24 января 2020

Мы столкнулись с проблемой при чтении файла avro в spark2-shell в Spark2.4. Любые указатели будут очень полезны.

Мы использовали следующий метод для чтения файлов avro в spark2.3, но эта поддержка в Spark2.4 было удалено:

spark2-shell --jars /tmp/spark/spark-avro_2.11-4.0.0.jar
import org.apache.avro.Schema
spark.sqlContext.sparkContext.hadoopConfiguration.set("avro.mapred.ignore.inputs.without.extension",     "true")
val df = spark.read.format("com.databricks.spark.avro").option("header", "true").option("mode", "DROPMALFORMED").load("<DIR_PATH_FOR_AVRO>")
  • Документация Spark 2.4 содержит следующие сведения:

(https://spark.apache.org/docs/latest/sql-data-sources-avro.html)

. / Bin / spark-shell --packages org. apache .spark: spark-avro_2.12: 2.4.4

Но при использовании этого мы получаем следующее исключение подход:

Exception in thread "main" java.lang.RuntimeException: 
[unresolved dependency: org.apache.spark#spark-avro_2.12;2.4.4: not found]
 at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1306)
 at org.apache.spark.deploy.DependencyUtils$.resolveMavenDependencies(DependencyUtils.scala:54)
 at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:315)
 at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:143)
 at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
 at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
 at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
 at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

также пробовал:

spark2-shell --packages org.apache.spark:spark-avro_2.12:2.4.4 --jars /tmp/spark/spark-avro_2.12-2.4.0.jar

1 Ответ

1 голос
/ 28 января 2020

"Исключение в потоке" main "java .lang.RuntimeException: [неразрешенная зависимость: org. apache .spark # spark-avro_2.12; 2.4.4: не найдено] ... " похоже на проблему с доступом к центральному репозиторию Maven на https://repo1.maven.org/maven2/, возможно, потому что ваша среда использует прокси.

Так что я думаю, что вы на правильном пути - вы можете вручную загрузить jar spark-avro_2.1x-2.4.x.jar из https://repo1.maven.org/maven2/org/apache/spark/spark-avro_2.xx/2.4.x/, перенесите его на свой узел и используйте spark2-shell --jar spark-avro_2.xx-2.4.x.jar для запуска оболочки REPL.

Похоже, вы используете дистрибутив Cloudera для Spark 2.4. Его последняя версия обслуживания 2.4.2, и она все еще основана на Scala 2.11, поэтому я думаю, что вы ищете jar spark-avro_2.11-2.4.2.jar.

С этой флягой у меня все работает нормально:

$ spark2-shell --jars ~/.m2/repository/org/apache/spark/spark-avro_2.11/2.4.2/spark-avro_2.11-2.4.2.jar
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://xxxxxxx.xxxnet:4056
Spark context available as 'sc' (master = yarn, app id = application_xxxxxxxxxxxxx_xxxxx).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.0.cloudera2
      /_/

Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_221)
Type in expressions to have them evaluated.
Type :help for more information.

scala> val df = spark.read.format("avro").load("/some/hdfs/path/kilo_sample.avro")
df: org.apache.spark.sql.DataFrame = [registration_dttm: string, id: bigint ... 11 more fields]

scala> df.show(false)
+--------------------+---+----------+---------+------------------------+------+---------------+-------------------+----------------------+----------+---------+----------------------------+----------------------------+
|registration_dttm   |id |first_name|last_name|email                   |gender|ip_address     |cc                 |country               |birthdate |salary   |title                       |comments                    |
+--------------------+---+----------+---------+------------------------+------+---------------+-------------------+----------------------+----------+---------+----------------------------+----------------------------+
|2016-02-03T07:55:29Z|1  |Amanda    |Jordan   |ajordan0@com.com        |Female|1.197.201.2    |6759521864920116   |Indonesia             |3/8/1971  |49756.53 |Internal Auditor            |1E+02                       |
|2016-02-03T17:04:03Z|2  |Albert    |Freeman  |afreeman1@is.gd         |Male  |218.111.175.34 |null               |Canada                |1/16/1968 |150280.17|Accountant IV               |                            |
...
|2016-02-03T10:30:36Z|20 |Rebecca   |Bell     |rbellj@bandcamp.com     |Female|172.215.104.127|null               |China                 |          |137251.19|                            |                            |
+--------------------+---+----------+---------+------------------------+------+---------------+-------------------+----------------------+----------+---------+----------------------------+----------------------------+
only showing top 20 rows

scala>

Если у вас все еще есть проблемы после пробного использования этой версии, обновите ваш вопрос с помощью полной трассировки стека, чтобы мы могли видеть точно в чем проблема.

...