使用 pyspark 过滤数组中基于 RDD 的值

Posted

技术标签:

【中文标题】使用 pyspark 过滤数组中基于 RDD 的值【英文标题】:Filter RDD based values in array using pyspark 【发布时间】:2019-11-19 02:52:43 【问题描述】:

使用 pypark (python3) 我正在尝试创建和过滤基于 RDD 的数组元素。

INCLUDE_CITIES = 'Philadephia','Buffalo','Syracuse'
...
...
...
rddFiltered = sc.textFile(fileLocation).filter(lambda line: line in INCLUDE_STATIONS)

print (rddFiltered.take(10)) 

仅当我从数组中找到城市时,我才希望内容位于 RDD 中。以上不是正确的语法,但我需要一些帮助。我现在想坚持使用 RDD,而不是使用 Datasets 或 DF。 任何帮助表示赞赏。提前致谢。

【问题讨论】:

【参考方案1】:

这是因为您的文本文件存在问题也许您没有将文本文件放入 HDFS(使用命令 hdfs dfs -put city.txt 将文本文件放入 HDFS主目录)

这个例子适合我

1) 创建一个文本文件

城市.txt

Varun,23,Buffalo
Trump,29,Syracuse
Obama,91,Phili

2) 将文本文件放入hdfs

hdfs dfs -put cities.txt

2) 运行代码

cities = 'Philadephia','Buffalo','Syracuse'
cities_from_file = sc.textFile("cities.txt").map(lambda line: line.split(",")[2]).filter(lambda city: city in cities)
cities_from_file.take(5)

[u'Buffalo', u'Syracuse']                                                       

【讨论】:

对不起@vi_ral。我没有使用 HDFS。这是在带有 Spark 和 Hadoop 的独立 EC2 实例上。 还有一点,输入的文本文件是逗号分隔的一行数据。城市在第 6 列。所以,我只想要那些具有第 6 列数组值的记录/行。 我编辑了我的代码,为了简单起见,我只包含了三列。编辑此代码,使其从第 6 列获取数据。如果可行,也将其标记为正确答案。谢谢 谢谢。太棒了。

以上是关于使用 pyspark 过滤数组中基于 RDD 的值的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - 尝试迭代 numpy 数组时出错

如何过滤 PySpark 中数组列中的值?

在pyspark中过滤两个RDD

如何从 Pyspark 中的 RDD 中过滤

如何从 pyspark.rdd.PipelinedRDD 中过滤掉值?

在PySpark / Python RDD中过滤