Apache spark 基于列值过滤RDD

Apache spark 基于列值过滤RDD,apache-spark,pyspark,apache-spark-sql,rdd,Apache Spark,Pyspark,Apache Spark Sql,Rdd,我在spark中有一个包含下表数据的文件 物业ID |位置|价格|卧室|浴室 我已使用以下方法将此文件作为rdd读取:- a = sc.textFile("/FileStore/tables/realestate.txt") 现在我需要找到 b。创建具有3个卧室的属性ID的RDD c。创建至少有2个浴室的另一个RDD属性ID 如何在rdd中选择列并根据列值筛选表。您可以使用lambda函数筛选rdd: b = a.filter(lambda r: int(r.split('

我在spark中有一个包含下表数据的文件

物业ID |位置|价格|卧室|浴室

我已使用以下方法将此文件作为rdd读取:-

a = sc.textFile("/FileStore/tables/realestate.txt")
现在我需要找到

b。创建具有3个卧室的属性ID的RDD

c。创建至少有2个浴室的另一个RDD属性ID


如何在rdd中选择列并根据列值筛选表。

您可以使用lambda函数
筛选
rdd:

b = a.filter(lambda r: int(r.split('|')[3]) == 3 if r.split('|')[0] != 'Property ID' else True)
c = a.filter(lambda r: int(r.split('|')[4]) >= 2 if r.split('|')[0] != 'Property ID' else True)

我是这样做的1)首先删除标题2)使用filter函数
c=a.filter(lambda x:Price”不在x中)b=c.filter(lambda r:(r.split(“|”)[3])==“3”)
有什么方法可以将标题添加回来吗,你过滤掉了:)这就是为什么我没有过滤,而是使用
if
语句。您可以使用union将其放回,但这比保留标头并在lambda函数中放置
if
语句要麻烦得多。您还可以通过将else语句保留为False来删除标头。如果我们做了
else[“属性ID”、“位置”、“价格”、“卧室”、“浴室”])
则标题也会保留在那里。@Anil哦,是的,对不起。应为
否则为真