过滤火花中的数据帧并保存为avro

时间:2016-05-18 15:46:10

标签: xml parsing apache-spark rdd avro

我正在尝试将数据框保存为avro文件。我读过一个有许多嵌套层的xml文件。它将其存储为数据帧。数据框已成功存储。 xml有许多名称空间标题,例如@ nso,@ ns1,@ ns2等。这些标题空间标题成为数据框中的标题。当我尝试将其保存为avro文件时,它会给我这个错误:“线程中的异常”主“org.apache.avro.SchemaParseException:非法的初始字符:@ ns0”

val conf = new SparkConf()
         .setMaster("local[2]")
         .setAppName("conversion")
val sc = new SparkContext(conf)

val sqlContext = new SQLContext(sc)

val df = sqlContext.read
  .format("com.databricks.spark.xml")
  .option("rowTag", "Stuff")
  .load("sample.xml")

df.printSchema()
df.show()

df.write
  .format("com.databricks.spark.avro")
  .save("output")

1 个答案:

答案 0 :(得分:1)

有效的Avro名称has to start with a letter or an underscore,因此您可以重命名从属性生成的列或指定备用前缀。 spark-csv允许您使用attributePrefix属性配置属性前缀:

val df = sqlContext.read
  .format("com.databricks.spark.xml")
  .option("rowTag", "Stuff")
  .option("attributePrefix", "attr_")  // or some other prefix of your choice
  .load("sample.xml")