【问题标题】:How to process (iterate through) a large JSON file on a hadoop/Spark cluster?如何处理(遍历)hadoop/Spark 集群上的大型 JSON 文件?
【发布时间】:2018-03-07 17:55:10
【问题描述】:

我现在已经找了一段时间了,发现了很多过去的损坏示例和链接,但是我有一个 2 GB 的 json 数据文件,我需要逐行处理,运行大量每行代码,并将重新格式化的数据保存到集群中。

我一直在尝试在 Spark 2.0/PySpark 中执行此操作,但运气不佳。我可以在较小的文件上执行此操作,但在我的实际文件上,我的 director 耗尽了堆内存。

当我尝试分解文件时,我收到了此处列出的错误 (Spark __getnewargs__ error),但原因明显不同,因为我没有引用列。

我现在使用的是带有 Hortonworks 的 CentOS6,单机集群。实际上,我更多的是寻找“我应该做什么”,而不仅仅是如何去做。我知道 Spark可以做到这一点,但如果有更好的方法,我也很乐意探索。

【问题讨论】:

  • 您只有 2 GB?那你为什么需要Hadoop?注意:根据定义,单个节点不是“集群”。您为 Spark 任务分配了多少内存?默认只有 2GB,这就解释了它为什么会耗尽内存
  • 一个 2GB 的文件。还有相当多的存储在那里。我尝试为该任务分配多达 20GB 的空间,但它的堆空间不足,所以没有帮助。
  • 你想用 JSON 文件实现什么?
  • 很多事情,但我现在遇到的问题是,当我将文件拆分成更易于管理的块时,我什至无法迭代文件。但最终,我正在阅读 Json,进行一些计算和评估,然后,对于某些标准,我将该行转换为 CSV 平面文件。
  • Spark 应该可以正常工作,但对于一个适合 10 美元闪存驱动器的相对中等大小的文件来说,它是多余的。驱动程序内存和执行程序内存之间存在差异。你在设置哪个?单个节点上有 20GB 可用空间?你见过shapeshed.com/jq-json 吗?甚至这个aadrake.com/…

标签: hadoop apache-spark


【解决方案1】:

您可以使用 JSON serde 在 JSON 文件的顶部定义 Hive 表,然后可以使用 Hive 或 Spark 进行分析。

【讨论】:

  • 假设 Hive 已安装。从纯粹的“运行并完成”的角度来看,Apache Drill 可能更有意义
  • 根据问题,正在使用安装了 Hive 的 Hortonworks Sandbox
  • 我确实有 Hive,但需要澄清的是,它是一个实际的生产服务器,而不是沙盒。
  • 此外,我不是要进行分析。我实际上需要对数据进行大规模转换,以便为其他应用程序创建输入。
  • 您可以使用 Hive 进行转换,或者按照建议您可以使用 Spark on Hive 表进行转换
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 2017-12-11
  • 2016-03-07
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多