问题标签 [apache-spark-xml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4592 浏览

xml - 在 Spark 2.1.0 中读取大文件时出现内存不足错误

我想使用 spark 将大型(51GB)XML 文件(在外部 HDD 上)读入数据帧(使用spark-xml 插件),进行简单的映射/过滤,重新排序,然后将其写回磁盘,作为 CSV文件。

java.lang.OutOfMemoryError: Java heap space但无论我如何调整它,我总是得到一个。

我想了解为什么增加分区数不会停止OOM错误

它不应该将任务分成更多部分,以便每个单独的部分更小并且不会导致内存问题吗?

(Spark 不可能试图把所有东西都塞进内存中,如果不合适就崩溃了,对吧??)

我尝试过的事情:

  • 在读取和写入时重新分区/合并到(5,000 和 10,000 个分区)数据帧(初始值为 1,604)
  • 使用较少数量的执行器(6、4,即使有2 个执行器,我也会收到 OOM 错误!)
  • 减小分割文件的大小(默认看起来是 33MB)
  • 提供大量内存(我所拥有的)
  • 增加到spark.memory.fraction0.8(默认为 0.6)
  • 减少spark.memory.storageFraction到 0.2(默认为 0.5)
  • 设置spark.default.parallelism为 30 和 40(我默认为 8)
  • 设置spark.files.maxPartitionBytes为 64M(默认为 128M)

我所有的代码都在这里(注意我没有缓存任何东西):

笔记

  • 输入拆分非常小(仅 33MB),那么为什么我不能有 8 个线程每个处理一个拆分呢?它真的不应该破坏我的记忆(我已经

更新我编写了一个较短版本的代码,它只读取文件,然后读取 forEachPartition(println)。

我得到同样的OOM错误:

PS:我使用的是 spark v 2.1.0。我的机器有 8 个内核和 16 GB 内存。

0 投票
1 回答
5330 浏览

scala - 如何在 Scala/Spark 的数据框中扩展数组

我使用 Databricks spark-xml 包将 XML 文件读入 Spark。该文件具有以下数据结构:

加载数据后,我得到一个数据框,如下所示:

“show”会产生以下结果:

是否有可能以下列形式获得此结果:

我已经尝试过:

但是没有什么能让我得到正确的结果,事实上最后一个版本根本不起作用,但我通过谷歌犯规了。

任何帮助或提示将不胜感激。

0 投票
3 回答
3957 浏览

spark-dataframe - 使用多个 RowTag 在 Spark 中读取 XML 文件

我想将具有 3 个不同 RowTag 的巨大 XML 文件读入 Apache Spark 数据帧。

RowTag = XML 元素,您在 Spark 中将其解释为一行。

标签

  • 包含不同的数据结构
  • 不重叠

xml-spark ( https://github.com/databricks/spark-xml ) 只提供一次读取一个 RowTag,所以我需要读取相同的文件 3 次(效率不高)。

有没有办法一次读取文件?

细节:

我有一个巨大的 XML 文件(24 GB),其中包含 3 个列表:

XML 文件有效。我想阅读 RowTags SoundRecording、Release & Transaction。

我更喜欢 Scala 库,但我会为任何支持读取的库感到高兴。

PS: 输出和他的模式如何?

  • 最佳选择:3 个 DataFrame 的数组,每个 RowTag 一个
  • 丑陋的选项:一个包含所有 3 个数据结构的可能元素的 DataFrame
0 投票
1 回答
442 浏览

apache-spark - Spark DataFrame xml更改列名

我试图使用 DataBricks Spark XML 加载 XML 文件。我能够正确加载数据,但我需要更改其中一列的名称并将其作为单独的标签放在架构中。基本上,很少有标签需要生成为空值,而这些标签不会出现在数据中。(这些字段在 XSD 中)。

例子:-

我需要更改为

我尝试了很多方法:-(我无法手动添加架构)。

  1. withColumn.-> (使用此选项,我可以添加一个新列,但在根级别,我需要将其添加到明确的层次结构中。)
  2. withColumnRenamed -> (这个选项不会改变任何东西)。

任何帮助表示赞赏!

0 投票
1 回答
756 浏览

scala - 将 spark 数据帧中每个分区的记录写入 xml 文件

我必须在 spark 数据框中的每个分区的文件中进行记录计数,然后我必须将输出写入 XML 文件。

这是我的数据框。

现在我必须计算每个分区中每个文件的记录数,然后将输出写入 XML 文件。

这就是我试图做到的方式。

我能够打印每个分区的记录总数并打印,但是当我尝试创建 xml 文件时,我遇到了错误。

我在用 Spark 2.2.0, Zeppelin 0.7.2

所以我必须导入com.databricks.spark.xml这个,但为什么因为如果我不导入 .csv 文件的话com.databricks.spark.csv

另外,我可以使用缓存dfMainOutputFinalWithoutNull,因为我将使用它两次来写入它的数据,然后计算它的分区记录,然后写入 xml 文件?

我添加了这个依赖

并重新启动解释器。然后我收到以下错误。

0 投票
1 回答
1716 浏览

scala - 为什么 spark-xml 会因 NoSuchMethodError 与 Spark 2.0.0 依赖关系而失败?

嗨,我是 Scala 和 Intellij 的菜鸟,我只是想在 Scala 上做到这一点:

基本上我正在尝试将 XML 转换为 spark 数据框我在 '.load("shops.xml")' 中收到 NoSuchMethod 错误,下面是 SBT

下面是跟踪:

有人可以指出错误吗?对我来说似乎是一个依赖问题。spark-core 似乎工作正常但不是 spark-sql 我之前有 scala 2.12 但由于 spark-core 未解决而更改为 2.11

0 投票
0 回答
331 浏览

apache-spark-xml - 用于 XML 文件的 Spark 结构化流

我正在尝试使用spark xml databricks package( spark-xml_2.11of com.databricks) 使用structred流 ( spark.readStream--) 解析 xml 文件。

在执行readstream操作时,就像不支持的操作“ readstream”一样。

请建议任何支持此或其他替代方案以实现 xml 流的计划。

0 投票
2 回答
2931 浏览

apache-spark-xml - 如何解析包含 xml 字符串的数据框?

如何在其中一个列本身中解析包含 xml 数据的 xml 文件?

在我们的一个项目中,我们收到 xml 文件,其中一些列存储另一个 xml。在将此数据加载到数据框时,内部 xml 被转换为StringType(这不是预期的),因此在查询数据时无法到达节点(使用点运算符)。

我在网上四处寻找生动的答案,但没有运气。在 GitHub 中发现了一个与我的用例完全相同的未解决问题。链接在这里。

https://github.com/databricks/spark-xml/issues/140

我的 xml 源文件如下所示。

在 SQL Server 中,要将 xml 存储在数据库列中,存在XML数据类型,但 Spark SQL 中不存在相同的数据类型。

有没有人遇到过同样的问题并找到任何解决方法?如果是,请分享。我们正在使用 Spark Scala。

0 投票
1 回答
1357 浏览

scala - 如何以csv格式保存来自spark xml的数组数据帧输出

我已经删除了我的两个问题,因为我认为我太大了,我无法清楚地解释它。

所以这次我试图让它变得简单。

所以我有一个复杂的嵌套 xml。我在 spark scala 中解析它,我必须将 xml 中的所有数据保存到文本文件中。

注意:我需要将数据保存到文本文件中,因为稍后我必须将此数据与另一个文本格式的文件连接起来。我也可以使用 json 或 perquet 文件格式加入我的 csv 文件格式吗?如果是,那么我可能不需要将我的 xml 转换为文本文件。

这是我的代码,我试图将 xml 保存到 csv 文件中,但由于 csv 不允许保存数组类型,所以我收到错误。

我正在寻找一些解决方案,我将能够提取数组的所有元素并将其保存到文本文件中。

这在保存之前使我低于输出

敌人每个唯一env:Data我都期待可以使用分区完成的唯一文件,但我如何将它保存在文本文件中。

我必须保存数组中的所有元素,我的意思是所有列。

我希望这一次我能把我的问题说清楚。

如果需要,我也可以更新架构。

0 投票
1 回答
889 浏览

python - 为什么 AWS Glue 上的 Spark-XML 会因 AbstractMethodError 而失败?

我有一个用 Python 编写的 AWS Glue 作业,它引入了 spark-xml 库(通过 Dependent jars 路径)。我正在使用 spark-xml_2.11-0.2.0.jar。当我尝试将我的 DataFrame 输出到 XML 时,出现错误。我正在使用的代码是:

applymapping1.toDF().repartition(1).write.format("com.databricks.xml").save("s3://glue.xml.output/Test.xml");

我得到的错误是:

"/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pyspark.zip/pyspark/sql/readwriter.py", line 550, in save File "/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001 /py4j-0.10.4-src.zip/py4j/java_gateway.py”,第 1133 行,通话中文件“/mnt/yarn/usercache/root/appcache/application_1517883778506_0016/container_1517883778506_0016_02_000001/pyspark.zip/pyspark/sql/utils.py”,第 63 行,在 deco 文件“/mnt/yarn/usercache/root/appcache/application_1517883778”中container_1517883778506_0016_02_000001/py4j-0.10.4-src.zip/py4j/protocol.py”,第 319 行,在 get_return_value py4j.protocol.Py4JJavaError:调用 o75.save 时出错。: java.lang.AbstractMethodError: com.databricks.spark.xml.DefaultSource15.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/immutable/Map;Lorg/apache /spark/sql/Dataset;)Lorg/apache/spark/sql/sources/BaseRelation; 在 org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:426) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.

如果我将其更改为 CSV,它可以正常工作:

applymapping1.toDF().repartition(1).write.format("com.databricks.csv").save("s3://glue.xml.output/Test.xml");

注意:使用 CSV 时,我不必导入 spark-xml。我认为 spark-csv 包含在 AWS Glue 的 Spark 环境中。

有什么建议可以尝试吗?

我尝试了各种版本的 spark-xml:

spark-xml_2.11-0.2.0 spark-xml_2.11-0.3.1 spark-xml_2.10-0.2.0