在Python中使用Hadoop处理大型csv文件

2024-01-05

我有一个巨大的 CSV 文件,想在 Amazon EMR (python) 上使用 Hadoop MapReduce 进行处理。

该文件有 7 个字段,但是我只查看date and quantity field.

 "date" "receiptId" "productId" "quantity"  "price" "posId" "cashierId"

首先,我的mapper.py

import sys

def main(argv):
    line = sys.stdin.readline()
    try:
        while line:
            list = line.split('\t')

            #If date meets criteria, add quantity to express key
                if int(list[0][11:13])>=17 and int(list[0][11:13])<=19:
                    print '%s\t%s' % ("Express", int(list[3]))
            #Else, add quantity to non-express key
                else:
                    print '%s\t%s' % ("Non-express", int(list[3]))

            line =  sys.stdin.readline()
except "end of file":
        return None
if __name__ == "__main__":
        main(sys.argv)

对于减速器,我将使用流命令:aggregate。

问题:

  1. 我的代码对吗?我在 Amazon EMR 中运行它,但输出为空。

  2. 所以我的最终结果应该是:快递,XXX和非快递,YYY。我可以让它在返回结果之前进行除法运算吗?只是 XXX/YYY 的结果。我应该把这段代码放在哪里?减速机??

  3. 另外,这是一个巨大的 CSV 文件,那么映射会将其分成几个分区吗?或者我是否需要显式调用 FileSplit?如果是这样,我该怎么做?


在这里回答我自己的问题!

  1. 代码错误。如果您使用聚合库来减少,您的输出不会遵循通常的键值对。它需要一个“前缀”。

    if int(list[0][11:13])>=17 and int(list[0][11:13])<=19:
        #This is the correct way of printing for aggregate library
        #Print all as a string.
        print  "LongValueSum:" + "Express" + "\t" + list[3]
    

    其他可用的“前缀”有:DoubleValueSum、LongValueMax、LongValueMin、StringValueMax、StringValueMin、UniqValueCount、ValueHistogram。欲了解更多信息,请看这里http://hadoop.apache.org/common/docs/r0.15.2/api/org/apache/hadoop/mapred/lib/aggregate/package-summary.html http://hadoop.apache.org/common/docs/r0.15.2/api/org/apache/hadoop/mapred/lib/aggregate/package-summary.html.

  2. 是的,如果您想做的不仅仅是基本总和、最小值、最大值或计数,您需要编写自己的减速器。

  3. 我还没有答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中使用Hadoop处理大型csv文件 的相关文章

随机推荐

  • 是否保证 LINQ 从 XDocument 读取项目的顺序?

    因此 我正在做的是使用 xml 文档来确定数据库更新需要运行某些 SQL 脚本的顺序 XML 遵循此格式
  • Uvicorn 中使用 FastAPI 进行信号处理

    我有一个应用程序使用Uvicorn with FastAPI 我还打开了一些连接 例如MongoDB 一旦出现某些信号 我想优雅地关闭这些连接 SIGINT SIGTERM and SIGKILL My server py file imp
  • Javascript 正则表达式 - 删除除分号之外的所有特殊字符

    在javascript中 如何从字符串中删除除分号之外的所有特殊字符 示例字符串 ABC D A b c Qwerty 应该返回 ABCDAbc Qwerty 您可以使用正则表达式删除任何不是字母字符或分号的内容 如下所示 A Za z g
  • 模块化和面向对象编程之间的最大区别是什么?

    面向对象的程序通常包含不同类型的 对象 每个对象对应于一种特定类型的复杂数据 管理 或者可能是现实世界的对象或概念 例如银行 帐户 曲棍球运动员或推土机 模块化编程 也称为 自顶向下设计 和 逐步设计 细化 是一种软件设计技术 强调分离 将
  • 发布版本中的错误在调试模式下不存在的常见原因

    仅在发布编译模式下出现但在调试模式下不会出现的错误和异常程序行为的典型原因是什么 很多时候 在 C 的调试模式下 所有变量都初始化为 null 而在发布模式下 除非明确说明 否则不会发生同样的情况 检查是否有任何调试宏和未初始化的变量 你的
  • 在Rails中,我应该启用serve_static_assets吗?

    我目前正在使用 Apache 代理到 Thin 使用这个article http articles slicehost com 2008 5 6 ubuntu hardy apache rails and thin 我的静态资源都不起作用
  • 解决 android studio 中的 gradle 依赖问题?

    我正在尝试添加一个样式化的进度条https android arsenal com details 1 1375 https android arsenal com details 1 1375 那里说 将特定存储库添加到您的构建文件中 r
  • iOS 9 和 Swift 2 升级后,Facebook SDK 登录时出现“以“null”打开此页面”模式

    我正在将项目更新到 Swift 2 和 iOS 9 我正在做的项目之一严重依赖 Facebook 的 SDK 我用它来登录 获取用户信息等 在更新之前 一旦您登录 Safari 就会将您直接重定向到该应用程序 现在我得到一个有趣的小模态 显
  • 静态分析警告是否会使 CI 构建失败?

    我们的团队正在研究项目中静态分析的各种选项 并且对于我们是否希望我们的持续集成构建因静态分析的警告而失败有不同的意见 反对构建失败的论点是 规则中经常存在例外情况 而试图绕过这些例外只是为了使构建成功会降低生产力 更好的方法是在构建时生成报
  • 如何使文本输入不可编辑?

    所以我有一个文本输入
  • 使用 Guava 进行缓存

    哪些 Guava 类适合线程安全缓存 我使用组合键 它是动态构建的 所以 softKeys 没有意义 对吧 我在某处看到 ConcurentLinkedHashMap 这是要走的路吗 它已经在最近的版本中了吗 抱歉 提问方式很混乱 Upda
  • 如何在 CodeIgniter 表单验证中使用 Bootstrap 错误样式?

    我的代码有一点问题 我正在研究 bootstrap CSS 我对这个框架感到非常惊讶 这就是为什么我决定研究这个 我对 CSS 的了解确实不够 但我明白一点 我正在创建一个表单 如果用户名或密码错误 我希望收到一条验证消息 我需要进行验证
  • 如何在我的应用程序中使用 UIKit 本地化字符串

    我们正在构建一款 iOS 游戏 我们公司需要取消按钮UIAlertView应始终根据用户的设备语言进行本地化 看起来UIKit框架中有这样一个字符串 我如何在我自己的应用程序中访问它 或者 还有其他方法可以创建带有本地化取消按钮的 UIAl
  • SQL 手机号码验证

    我有我的 SQL 数据库 我想在其中过滤掉所有有效的手机号码 我目前使用如下 WHERE pn PhoneNumber LIKE 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 OR pn Phone
  • 如何仅为测试源添加 Scala 编译器插件

    是否可以仅在编译测试源时添加Scala编译器插件 当通过调用 SBT 添加编译器插件时addCompilerPlugin然后添加库依赖项 相关方法有 Transforms dependency to be in the auto compi
  • jQuery Offset 返回负值

    我有一个像下面这样的场景 在我的用户界面中 我将有一个文本框 如果我在文本框中输入了数字 我需要向下滚动到相应的页码 In Dom 我将有一些带有各自 id 的 div 如果用户输入页码为 5 我将检查 dom 中的第 5 个 div 偏移
  • 在浏览器中流式传输 Pdf 时如何设置文件名?

    不确定如何确切地表达这个问题 所以欢迎编辑 无论如何 就这样吧 我目前使用 Crystal Reports 生成 Pdfs 并将输出流式传输给用户 我的代码如下所示 System IO MemoryStream stream new Sys
  • Cmake 无法找到 Python 库

    出现此错误 sudo unable to resolve host coderw ll Could NOT find PythonLibs missing PYTHON LIBRARIES PYTHON INCLUDE DIRS CMake
  • 升级到 R 2.15.2 无法加载 stats 包

    运行 Ubuntu 12 04 今天终于从 2 12 升级到 2 15 2 当我启动 R 时 出现此错误 Error in dyn load file DLLpath DLLpath unable to load shared object
  • 在Python中使用Hadoop处理大型csv文件

    我有一个巨大的 CSV 文件 想在 Amazon EMR python 上使用 Hadoop MapReduce 进行处理 该文件有 7 个字段 但是我只查看date and quantity field date receiptId pr