找回密码
 立即注册
相关推荐换一批
  1. 一个文本出现在另一个文本中的次数易语言源码
  2. 一个文本在另一个文本中出现的次数的易语言源代码
  3. 易语言一个可以将图片转换成SWF的COM可以设置4
  4. 高安_天邑ty1608_s905l3b_mt7668线刷固件当贝桌面刷机教程
  5. 电信烽火hg680j机顶盒刷全网通教程
  6. DAZ外国超可爱小女孩3D模型素材
  7. 武侠风游戏角色3D模型素材合集
  8. Python源码 html第一个网页
  9. 搞笑段子.1-300
  10. 自适应多引擎搜索单页源码
  11. WordPress简洁小清新响应式Akina主题
  12. GB/Z 34447-2017/IEC TR 62854:2014 照明设备的锐边试验装置和试验程序锐边试验
  13. YD/T 971-1998 多媒体会议的特定网络的数据协议栈
  14. YY/T 0457. 3-2003/IEC 61262-3: 1994 医用电气设备光电X射线影像增强器特性 第3部?
  15. 北师大版2022-2023一年级数学上册期末测试卷可下载打印(附答案)
  16. 2021年人教版小学一年级数学下册期中考试试题考试卷及参考答案解析
  17. 2020年人教版小学一年级数学下册第四单元复习精编试题考试卷及深度解析(附答案)
  18. 2020年北师大版小学一年级数学下册第四单元综合测评卷考试卷及参考解析
  19. 2020年北师大版小学一年级数学上册期末综合复习考试卷指导全集
  20. 人教版2019年小学一年级数学下册《第一单元》单元检测试卷考试卷及参考答案
  21. 2017年苏教版小学一年级下册数学期中检测试卷考试卷
  22. 北师大版2015-2016学年小学一年级数学下学期期末质量检测卷考试卷
  23. 2015-2016学年人教版小学一年级数学上册期末检测题考试卷
  24. 2013年北师大版一年级数学下册:核心知识点系统梳理与归纳
问题
我想过滤输出 RDD 的元素,其中字段“状态”是不等于“OK”。我从 HDFS 上的一组 CSV 文件创建一个 RDD,然后在尝试映射之前使用过滤器获取所需的结构:
  1. import csv, StringIO   

  2. files = "/hdfs_path/*.csv"

  3. fields = ["time", "status"]

  4. dial = "excel"

  5. default = {'status': 'OK', 'time': '2014-01-01  00:00:00'}

  6. def loadRecord(line, fieldnames, dialect):
  7.     input = StringIO.StringIO(line)
  8.     reader = csv.DictReader(input, fieldnames = fieldnames, dialect = dialect)
  9.     try:
  10.         line = reader.next()
  11.         if line is None:
  12.             return default
  13.         else:
  14.             return line
  15.     except:
  16.         return default

  17. harmonics = sc.textFile(files) \
  18.               .map(lambda x: loadRecord(x, fields, dial)) \
  19.               .filter(lambda x: "OK" not in x['status'])
复制代码

我可以在这个 RDD 上执行其他操作 - 例如另一个地图仅对某些字段等进行操作。但是,当我使用 filter 运行代码时,其中一个任务总是失败,并在 lambda 函数中出现异常:

筛选

我认为这意味着 lambda 收到了一个 'NoneType object is not iterable' ,所以我添加了代码来过滤以避免返回 None 。但是,我仍然遇到同样的错误。它确实适用于一个小样本数据集,但我的实际数据足够大,我不确定如何检测它的哪一部分可能导致问题。

欢迎任何意见!

回答
首先,使用 map(lambda x: loadRecord(x, fields, dial)) 重置 map(lambda x: (x, loadRecord(x, fields, dial))) 的空间 - 这会保留原始记录和解析后的记录.

其次,将 flatMap(test_function) 调用替换为 filter(),定义 test_function 如何测试输入,如果第二个传递的参数为 None(解析的记录),则返回第一个参数。

通过这种方式,您可以获得导致问题的输入行并在本地测试脚本。通常,我会将行 global default 添加为函数的第一行





上一篇:安卓触控震动?
下一篇:Android_System UI设计规则