Apache spark 基于Pyspark中的列将RDD拆分为两个RDD
我是Pyspark的新手。我需要根据Pyspark中的id(列名)将RDD拆分为两个RDD。一个RDD应包含重复值,另一个RDD应包含非重复值 下面是我的输入数据Apache spark 基于Pyspark中的列将RDD拆分为两个RDD,apache-spark,pyspark,Apache Spark,Pyspark,我是Pyspark的新手。我需要根据Pyspark中的id(列名)将RDD拆分为两个RDD。一个RDD应包含重复值,另一个RDD应包含非重复值 下面是我的输入数据 1,vikram,Technology,30000 2,vivek,Sales,20000 3,avnessh,Marketing,40000 5,Raju,Strategy,5000 1,mushahid,Sales,10000 3,Shyam,Legal,35000 如果需要RDD转换,则未提及。所以,我将继续并用Da
1,vikram,Technology,30000
2,vivek,Sales,20000
3,avnessh,Marketing,40000
5,Raju,Strategy,5000
1,mushahid,Sales,10000
3,Shyam,Legal,35000
如果需要
RDD
转换,则未提及。所以,我将继续并用DataFrame
转换给出答案。如果需要(在底部提到),可以将生成的DataFrame
转换为RDD
使用数据的子集
data = [
[1,'vikram','Technology',30000],
[2,'vivek','Sales',20000],
[1,'mushahid','Sales',10000]
]
data_sdf = spark.sparkContext.parallelize(data).toDF(['id', 'name', 'foo', 'bar'])
# +---+--------+----------+-----+
# | id| name| foo| bar|
# +---+--------+----------+-----+
# | 1| vikram|Technology|30000|
# | 2| vivek| Sales|20000|
# | 1|mushahid| Sales|10000|
# +---+--------+----------+-----+
# count the "id" occurrances
id_counts = data_sdf.groupBy('id'). \
agg(func.count('*').alias('id_cnt')). \
filter(func.col('id_cnt') > 1)
dup_ids = [k.id for k in id_counts.collect()]
# [1]
# data with duplicate ids
dup_id_data_sdf = data_sdf. \
filter(func.col('id').isin(dup_ids))
# +---+--------+----------+-----+
# | id| name| foo| bar|
# +---+--------+----------+-----+
# | 1| vikram|Technology|30000|
# | 1|mushahid| Sales|10000|
# +---+--------+----------+-----+
# data with no duplicate ids
nodup_id_data_sdf = data_sdf. \
filter(func.col('id').isin(dup_ids) == False)
# +---+-----+-----+-----+
# | id| name| foo| bar|
# +---+-----+-----+-----+
# | 2|vivek|Sales|20000|
# +---+-----+-----+-----+
转换为RDD
dup_id_data_rdd = dup_id_data_sdf.rdd
nodup_id_data_rdd = nodup_id_data_sdf.rdd
你能举例说明吗?在第一行和第五行的情况下会发生什么?第一行和第五行将在一个RDD中,其余的记录应该在另一个RDD中。因为第一个和第五个是重复记录,因为我们的密钥是id Only,您能包括问题中的所有内容吗?对所有人都有帮助我们可以使用数据帧转换吗,还是有必要进行RDD转换?但是,对于下面的语句,在它的giving me error dup_ids=[k.id for k in id_counts.collect()]错误:AttributeError:“NoneType”对象在以下库中没有属性“collect”。我已从pyspark.sql导入SparkSession从pyspark.sql.functions导入col导入pyspark.sql.functions作为funcy运行id_counts.show()时,它会按预期的方式提供结果。它的打印复制了count+--+--+--+--id | id | cnts+--+--+--+--+--+--1 | 2 | | 3 | 2 |+--+--+我需要将此id | u counts DF再次转换为RDD吗?不,您不必将其转换为
RDD
。那么id\u counts.collect()
呢?这是否给了一个ResultHanks sankart它的工作,这是我的错误,当分配id_计数时,我最后给出了.show()操作,因此没有分配id_计数,因此dup_id给我非类型对象没有属性错误