【问题标题】:Reading AVRO from Azure Datalake in Databricks在 Databricks 中从 Azure Datalake 读取 AVRO
【发布时间】:2020-01-08 17:13:14
【问题描述】:

我正在尝试读取 eventthub 数据 (AVRO) 格式。我在将数据加载到数据块中的数据框中时遇到问题。

这是我正在使用的代码。如果我做错了什么,请告诉我

path='/mnt/datastore/origin/zone=raw/subject=customer_events/source=EventHub/ver=1.0/*.avro'

df = spark.read.format("com.databricks.spark.avro") \
    .load(path)

错误

IllegalArgumentException: 'java.net.URISyntaxException: Relative path in absolute URI:

我确实尝试使用一些代码来消除错误,但我收到了语法错误

import org.apache.spark.sql.SparkSession
SparkSession spark = SparkSession
                     .builder()
                   .config("spark.sql.warehouse.dir","/mnt/datastore/origin/zone=raw/subject=customer_events/source=EventHub/ver=1.0/")
                   .getOrCreate()



SyntaxError: invalid syntax
File "<command-265213674761208>", line 2
SparkSession spark = SparkSession

【问题讨论】:

  • 看起来您正在使用 Python,但尝试运行 Scala/Java 代码...因此SyntaxError

标签: apache-spark avro azure-data-lake azure-databricks


【解决方案1】:

绝对 URI 中的相对路径

您需要指定协议而不是使用/mnt

例如,wasb://some/path/ 如果从 Azure blobstore 读取

您也可以排除 *.avro,因为 Avro 阅读器应该已经读取了路径中的所有 Avro 文件

https://docs.databricks.com/data/data-sources/read-avro.html#python-api

如果你想从 EventHub 中读取,它会公开一个 Kafka API,而不是文件路径,AFAIK

【讨论】:

  • 有没有办法使用正则表达式来检索日期范围文件。例如:最近两周。文件格式为 /2020/03/25/*.json 。每天都有单独的目录保存数据
  • @SajithVijesekara 以path/to/data/year=2020/month=03/day=25/*.json 等分区格式存储数据。然后spark.read.format("json").path("/path/to/data") 可以在任何日期范围内的内部分区上进行过滤。这就是 Hadoop/Hive 更喜欢查询数据的方式,这也是 Spark 使用的方式
猜你喜欢
  • 2020-05-08
  • 2020-03-23
  • 2023-02-01
  • 2020-06-28
  • 1970-01-01
  • 2020-08-09
  • 2020-06-11
  • 2021-10-19
  • 2020-02-22
相关资源
最近更新 更多