如何按字段重新划分pyspark rdd,而不将其转换为Dataframe?

vxqlmq5t  于 2021-05-24  发布在  Spark
关注(0)|答案(0)|浏览(332)

是否可以按特定字段重新划分rdd,而不将其转换为Dataframe?
我想按第四个字段重新划分。
最好是在将列表转换为rdd之后

people = [
          ('john', 35, 54, 'A'),
          ('george', 94, 84, 'B'),
          ('nicolas', 7, 9, 'B'),
          ('tom', 86, 93, 'A'),
          ('jason', 62, 73, 'B'),
          ('bill', 15, 58, 'A'),
          ('william', 9, 3, 'A'),
          ('brad', 73, 37, 'B'),
          ('cosmo', 52, 67, 'B'),
          ('jerry', 73, 30, 'A')
  ]

rdd = spark.sparkContext.parallelize(people)

或者在执行dict压缩之后

people = [('john', 35, 54, 'A'),
          ('george', 94, 84, 'B'),
          ('nicolas', 7, 9, 'B'),
          ('tom', 86, 93, 'A'),
          ('jason', 62, 73, 'B'),
          ('bill', 15, 58, 'A'),
          ('william', 9, 3, 'A'),
          ('brad', 73, 37, 'B'),
          ('cosmo', 52, 67, 'B'),
          ('jerry', 73, 30, 'A')]

fields = ('name', 'x', 'y', 'class')

data = [dict(zip(fields, person)) for person in people]

rdd = spark.sparkContext.parallelize(data)

>>> data

[{'name': 'john', 'x': 35, 'y': 54, 'class': 'A'},
 {'name': 'george', 'x': 94, 'y': 84, 'class': 'B'},
 {'name': 'nicolas', 'x': 7, 'y': 9, 'class': 'B'},
 {'name': 'tom', 'x': 86, 'y': 93, 'class': 'A'},
 {'name': 'jason', 'x': 62, 'y': 73, 'class': 'B'},
 {'name': 'bill', 'x': 15, 'y': 58, 'class': 'A'},
 {'name': 'william', 'x': 9, 'y': 3, 'class': 'A'},
 {'name': 'brad', 'x': 73, 'y': 37, 'class': 'B'},
 {'name': 'cosmo', 'x': 52, 'y': 67, 'class': 'B'},
 {'name': 'jerry', 'x': 73, 'y': 30, 'class': 'A'}]

这样做的原因是,在重新分区之后,我将在这个数据集上执行一个嵌套循环,这在列表上执行比在Dataframe上执行更容易、更快。
如果那是不可能的,我还能做什么?我可以将我的列表转换为Dataframe、重新分区,然后再将Dataframe转换为列表吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题