我正在尝试将数据框保存为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")
答案 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")