python - pyspark:仅基于 rdd 的操作
问题描述
我正在尝试仅使用基于 rdd 的操作。我有一个类似的文件;
0, Alpha,-3.9, 4, 2001-02-01, 5, 20
0, Beta,-3.8, 3, 2002-02-01, 6, 21
1, Gamma,-3.7, 8, 2003-02-01, 7, 22
0, Alpha,-3.5, 5, 2004-02-01, 8, 23
0, Alpha,-3.9, 6, 2005-02-01, 8, 27
首先,我将数据加载到 rdd 中,如下所示,
rdd = sc.textFile(myDataset)
然后我对first elements
每个原始的不同元素感兴趣。意思Alpha, Beta, Gamma
。在这种情况下,我期望3
不同的元素。这就是我所做的,
coll = [] # to collect the distinct elements
list_ = rdd.collect() # to get the list
for i in list_:
result = myFun(i) # this function I created to process line by line and return a tuple.
if result[1] not in coll:
coll.append(result[1])
仅使用基于 rdd 的操作有没有更快/更好的方法来做到这一点?
解决方案
你可以像下面这样map
使用:distinct
rdd = sc.textFile('path/to/file/input.txt')
rdd.take(10)
#[u'0, Alpha,-3.9, 4, 2001-02-01, 5, 20', u'0, Beta,-3.8, 3, 2002-02-01, 6, 21', u'1, Gamma,-3.7, 8, 2003-02-01, 7, 22', u'0, Alpha,-3.5, 5, 2004-02-01, 8, 23', u'0, Alpha,-3.9, 6, 2005-02-01, 8, 27']
list_ = rdd.map(lambda line: line.split(",")).map(lambda e : e[1]).distinct().collect()
list_
[u' Alpha', u' Beta', u' Gamma']
推荐阅读
- c# - 为什么这个用于我的武器重装的协程不起作用?
- sql - AutoMapper SQL 优化映射投影生成(NonNullable To Nullable)
- c# - 为什么Dictionary在这里变成了KeyValuePair?
- visual-studio-code - 如何使用 sublime 键盘快捷键等一个键绑定向选择或整行添加评论?
- c# - 列表
加入数据表 - python - 如果因变量既有正值又有负值,如何处理任何机器学习算法?
- aws-amplify - 我可以使用 AWS Amplify 创建在将新图像上传到 S3 时触发 lambda 函数的 SQS
- javascript - 使用 javascript 时无法调整设计
- c# - SQL/VisualStudio 的“插入语句”中的多线程
- node.js - 在单个查询中计算 mongoose 中的文档