当我在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更多
答案 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")