Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 基于Pyspark中的列将RDD拆分为两个RDD_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 基于Pyspark中的列将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

我是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
转换,则未提及。所以,我将继续并用
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给我非类型对象没有属性错误