【问题标题】:How to read a CSV wih an avro schema object as header on pyspark?如何在 pyspark 上读取带有 avro 模式对象作为标头的 CSV?
【发布时间】:2019-10-11 01:12:06
【问题描述】:

我有一个可以这样正确读取的文件:

sqlContext.read.format('csv').options(header='false', inferSchema='true', delimiter = "\a", nullValue = '\\N').load('adl://resource.azuredatalakestore.net/datalake-prod/raw/something/data/something/date_part={}/{}'.format(elem[0], elem[1]))

问题是没有头文件,头文件实际上在另一个avsc类型的文件中,一个Apache Avro模式对象。

将它用作我的 DF 标头的最佳方法是什么?

我正在 Azure Databricks 上运行 pyspark。

【问题讨论】:

  • 了解“原始数据”是如何加载的可能值得一试……如果您获得了 AVSC,那么您是否曾经拥有过真正的 Avro?如果是,为什么要转换成 CSV?

标签: csv apache-spark pyspark avro databricks


【解决方案1】:

您也有 avro 文件吗? databricks 站点有这个读取 avsc 文件的示例 (https://docs.databricks.com/spark/latest/data-sources/read-avro.html)。所以你可以先将 avsc 文件读入数据框:

import org.apache.avro.Schema

val schema = new Schema.Parser().parse(new File("user.avsc"))

val df = spark
  .read
  .format("avro")
  .option("avroSchema", schema.toString)
  .load("/tmp/episodes.avro")

如果您没有 avro 文件,您可以尝试将该代码指向一个空文件夹。

然后使用 csv 文件上的架构:

val df = spark.read.format("csv").schema(df.schema).load(csvFilePath)

【讨论】:

  • 注意:使用load(avrofilePath)无法读取.avsc文件
  • 感谢您提出指向空路径的想法。我也看到了那个例子。我的问题是我无法在 pyspark 中翻译该代码。我什至导入 spark avro 依赖项,但它说它不作为模块存在。
  • 对于 PySpark,请在此处尝试解决方案:stackoverflow.com/questions/54693110/…。最坏的情况是将 avsc json 读入 df 并通过迭代构建模式。
猜你喜欢
  • 2019-07-29
  • 2020-01-26
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多