如何读取带有avro模式对象的CSV作为pyspark的标头?

时间:2019-05-24 12:16:28

标签: csv apache-spark pyspark avro databricks

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

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。

1 个答案:

答案 0 :(得分:0)

您还有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)