如何在Spark 2.2.0中加载XML文件?

时间:2018-01-24 07:53:53

标签: xml scala apache-spark apache-spark-sql

当我在spark-2.2.0中加载xml文件时:

var ac = spark.read.format("xml").option("rowTag", "App").load("/home/sid/Downloads/Files/*.xml")

它向我显示错误:

  

java.lang.ClassNotFoundException:无法找到数据源:xml。请在http://spark.apache.org/third-party-projects.html找到套餐     在   org.apache.spark.sql.execution.datasources.DataSource $ .lookupDataSource(DataSource.scala:549)     在   org.apache.spark.sql.execution.datasources.DataSource.providingClass $ lzycompute(DataSource.scala:86)     在   org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:86)     在   org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:301)     在    org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)     在org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:156)     ...... 48岁了

     

引起:java.lang.ClassNotFoundException:xml.DefaultSource     在scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:62)     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)     在org.apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 21 $$ anonfun $ apply $ 12.apply(DataSource.scala:533)     在org.apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 21 $$ anonfun $ apply $ 12.apply(DataSource.scala:533)     在scala.util.Try $ .apply(Try.scala:192)     在org.apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 21.apply(DataSource.scala:533)     在org.apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 21.apply(DataSource.scala:533)     在scala.util.Try.orElse(Try.scala:84)     在org.apache.spark.sql.execution.datasources.DataSource $ .lookupDataSource(DataSource.scala:533)     ... 53更多

2 个答案:

答案 0 :(得分:3)

在这里,您必须使用databricks包来加载XML文件。您可以使用以下命令使用spark-submit或spark-shell加载数据库包。

file = new File([blob], newFileName, { type: blob.type, lastModified: Date.now()});

然后您可以按此加载。

$SPARK_HOME/bin/spark-shell --packages com.databricks:spark-xml_2.10:0.4.1

有关更多信息,请访问此链接。 https://github.com/databricks/spark-xml

答案 1 :(得分:0)

@sahil desai - 当我们已经为xml添加了依赖项时,为什么我们应该创建spark上下文,因为spark-shell已经将spark会话作为spark提供。 这不会更好吗?

 val df = spark.read.format("xml")
         .option("rowTag", "app")
         .load("/home/sid/Downloads/Files/*.xml")