猿问

Pyspark:如何从 pyspark.sql.dataframe.DataFrame

我对spark语言和pyspark. 我有一个pyspark.sql.dataframe.DataFrame如下所示:


df.show()

+--------------------+----+----+---------+----------+---------+----------+---------+

|                  ID|Code|bool|      lat|       lon|       v1|        v2|       v3|

+--------------------+----+----+---------+----------+---------+----------+---------+

|5ac52674ffff34c98...|IDFA|   1|42.377167| -71.06994|17.422535|1525319638|36.853622|

|5ac52674ffff34c98...|IDFA|   1| 42.37747|-71.069824|17.683573|1525319639|36.853622|

|5ac52674ffff34c98...|IDFA|   1| 42.37757| -71.06942|22.287935|1525319640|36.853622|

|5ac52674ffff34c98...|IDFA|   1| 42.37761| -71.06943|19.110023|1525319641|36.853622|

|5ac52674ffff34c98...|IDFA|   1|42.377243| -71.06952|18.904774|1525319642|36.853622|

|5ac52674ffff34c98...|IDFA|   1|42.378254| -71.06948|20.772903|1525319643|36.853622|

|5ac52674ffff34c98...|IDFA|   1| 42.37801| -71.06983|18.084948|1525319644|36.853622|

|5ac52674ffff34c98...|IDFA|   1|42.378693| -71.07033| 15.64326|1525319645|36.853622|

|5ac52674ffff34c98...|IDFA|   1|42.378723|-71.070335|21.093477|1525319646|36.853622|

|5ac52674ffff34c98...|IDFA|   1| 42.37868| -71.07034|21.851894|1525319647|36.853622|

|5ac52674ffff34c98...|IDFA|   1|42.378716| -71.07029|20.583202|1525319648|36.853622|

|5ac52674ffff34c98...|IDFA|   1| 42.37872| -71.07067|19.738768|1525319649|36.853622|

+--------------------+----+----+---------+----------+---------+----------+---------+

only showing top 20 rows

我想在循环中提取每个唯一用户的信息,并将其转换为熊猫数据框。


对于第一个用户,这就是我想要的:


id0 = df.first().ID

tmpDF = df.filter((fs.col('ID')==id0))

它可以工作,但是将其转换为熊猫数据框需要很长时间


tmpDF = tmpDF.toPandas()


杨__羊羊
浏览 193回答 2
2回答

慕容708150

你可以通过使用将 spark df 转换为 pandastoPandas()unique_df = df.select('ID').distinct()unique_pandas_df = unique_df.toPandas()

慕雪6442864

以下是您正在寻找的内容,df.select("ID").distinct().rdd.flatMap(lambda x: x).collect()为您提供了一个独特的列表ID,您可以使用它来创建filterspark 数据框,toPandas()并可用于将 spark 数据框转换为 pandas 数据框。for i in df.select("ID").distinct().rdd.flatMap(lambda x: x).collect():  tmp_df = df.filter(df.ID == i)  user_pd_df = tmp_df.toPandas()更新:由于问题已被编辑toPandas()导致将 DataFrame 中的所有记录收集到驱动程序,并且应该在数据的一小部分上完成。如果您尝试将巨大的 DataFrame 转换为 pandas,则需要花费大量时间。
随时随地看视频慕课网APP

相关分类

Python
我要回答