在Hadoop中转换JSON文件

2024-09-24 06:28:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有100GB的JSON文件,其每一行如下所示:

{"field1":100, "field2":200, "field3":[{"in1":20, "in2":"abc"},{"in1":30, "in2":"xyz"}]}

(实际上要复杂得多,但这只是一个小的演示。)

我想把它处理成每行都是这样的:

^{pr2}$

作为Hadoop的新手,我只想知道我走的路是否正确:

关于这一点: http://www.glennklockwood.com/di/hadoop-streaming.php 对于传统的应用程序,我会用Python创建一个mapper和reducer,并使用类似的方法执行它:

hadoop \
   jar /opt/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar \
   -mapper "python $PWD/mapper.py" \
   -reducer "python $PWD/reducer.py" \
   -input "wordcount/mobydick.txt"   \
   -output "wordcount/output"

现在让我知道如果我走对了方向:

因为我只需要将很多文件解析成另一种形式;我想我不需要任何简化步骤。我可以简单地写一个地图:

  1. 从stdin获取输入
  2. 阅读标准输入逐行
  3. 根据我的规范转换每一行
  4. 输出到标准输出

然后我可以用一个映射器和0个reducer来运行hadoop。在

这种方法似乎正确吗?我是真的正确地使用集群,还是像在一台主机上运行Python脚本一样糟糕?在


Tags: 文件方法pyhadoopjsonoutput标准pwd
1条回答
网友
1楼 · 发布于 2024-09-24 06:28:23

你是对的,在这种情况下,你不需要任何减速器,你的映射器的输出是你想要的,所以你应该把减速器的数量设置为0。当您告诉Hadoop JSON数据所在的输入路径时,它将自动向每个映射器提供随机数量的JSON行,映射器将处理这些行,您需要将其发送到上下文,以便它将值存储在输出路径中。这个方法是正确的,而且这个任务是100%并行的,所以如果您的集群中有多台机器并且您的配置是正确的,那么它应该充分利用集群,并且它的运行速度将比在单个主机上运行它快得多。在

相关问题 更多 >