问题标签 [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.
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.fraction
0.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 内存。
scala - 如何在 Scala/Spark 的数据框中扩展数组
我使用 Databricks spark-xml 包将 XML 文件读入 Spark。该文件具有以下数据结构:
加载数据后,我得到一个数据框,如下所示:
“show”会产生以下结果:
是否有可能以下列形式获得此结果:
我已经尝试过:
和
和
但是没有什么能让我得到正确的结果,事实上最后一个版本根本不起作用,但我通过谷歌犯规了。
任何帮助或提示将不胜感激。
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
apache-spark - Spark DataFrame xml更改列名
我试图使用 DataBricks Spark XML 加载 XML 文件。我能够正确加载数据,但我需要更改其中一列的名称并将其作为单独的标签放在架构中。基本上,很少有标签需要生成为空值,而这些标签不会出现在数据中。(这些字段在 XSD 中)。
例子:-
我需要更改为
我尝试了很多方法:-(我无法手动添加架构)。
- withColumn.-> (使用此选项,我可以添加一个新列,但在根级别,我需要将其添加到明确的层次结构中。)
- withColumnRenamed -> (这个选项不会改变任何东西)。
任何帮助表示赞赏!
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 文件?
我添加了这个依赖
并重新启动解释器。然后我收到以下错误。
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
apache-spark-xml - 用于 XML 文件的 Spark 结构化流
我正在尝试使用spark xml databricks package
( spark-xml_2.11
of com.databricks
) 使用structred
流 ( spark.readStream--
) 解析 xml 文件。
在执行readstream
操作时,就像不支持的操作“ readstream
”一样。
请建议任何支持此或其他替代方案以实现 xml 流的计划。
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。
scala - 如何以csv格式保存来自spark xml的数组数据帧输出
我已经删除了我的两个问题,因为我认为我太大了,我无法清楚地解释它。
所以这次我试图让它变得简单。
所以我有一个复杂的嵌套 xml。我在 spark scala 中解析它,我必须将 xml 中的所有数据保存到文本文件中。
注意:我需要将数据保存到文本文件中,因为稍后我必须将此数据与另一个文本格式的文件连接起来。我也可以使用 json 或 perquet 文件格式加入我的 csv 文件格式吗?如果是,那么我可能不需要将我的 xml 转换为文本文件。
这是我的代码,我试图将 xml 保存到 csv 文件中,但由于 csv 不允许保存数组类型,所以我收到错误。
我正在寻找一些解决方案,我将能够提取数组的所有元素并将其保存到文本文件中。
这在保存之前使我低于输出
敌人每个唯一env:Data
我都期待可以使用分区完成的唯一文件,但我如何将它保存在文本文件中。
我必须保存数组中的所有元素,我的意思是所有列。
我希望这一次我能把我的问题说清楚。
如果需要,我也可以更新架构。
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