python - PySpark:不使用循环将 DataFrame 拆分为多个 DataFrame

标签 python apache-spark pyspark spark-dataframe

嗨,我有一个如图所示的 DataFrame -

ID       X        Y

1      1234      284

1      1396      179

2      8620      178

3      1620      191

3      8820      828

我想根据 ID 将此 DataFrame 拆分为多个 DataFrame。因此,对于此示例,将有 3 个 DataFrame。实现它的一种方法是在循环中运行过滤器操作。但是,我想知道是否可以以更有效的方式完成。

最佳答案

#initialize spark dataframe
df = sc.parallelize([ (1,1234,282),(1,1396,179),(2,8620,178),(3,1620,191),(3,8820,828) ] ).toDF(["ID","X","Y"])

#get the list of unique ID values ; there's probably a better way to do this, but this was quick and easy
listids = [x.asDict().values()[0] for x in df.select("ID").distinct().collect()]
#create list of dataframes by IDs
dfArray = [df.where(df.ID == x) for x in listids]

dfArray[0].show()
+---+----+---+
| ID|   X|  Y|
+---+----+---+
|  1|1234|282|
|  1|1396|179|
+---+----+---+
dfArray[1].show()
+---+----+---+
| ID|   X|  Y|
+---+----+---+
|  2|8620|178|
+---+----+---+

dfArray[2].show()
+---+----+---+
| ID|   X|  Y|
+---+----+---+
|  3|1620|191|
|  3|8820|828|
+---+----+---+

关于python - PySpark:不使用循环将 DataFrame 拆分为多个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870969/

相关文章:

python - Redis 批量插入不起作用

python - 是否可以从上层堆栈帧获取 locals() 和 globals() ?

python - 如何从单个 RDD 添加 2 个 RDD 的列,然后根据 PySpark 中的日期数据聚合行

sbt - IOException : Cannot run program "javac" when "sudo ./sbt/sbt compile" in Spark?

python - 查找任何 pyspark 数据集的 "primary key"

apache-spark - 将 rdd 转换为数据帧 : AttributeError: 'RDD' object has no attribute 'toDF'

apache-spark - 修改 Spark 数据框中的结构列

python - 元类冲突、多重继承、实例为父类

python - Tkinter - 如何在菜单栏中创建子菜单

scala - 从 sbt 运行 spark-shell