我看过并尝试了许多关于这个问题的现有 StackOverflow 帖子,但都不起作用。我猜我的JAVA堆空间对于我的大数据集来说并不像预期的那样大,我的数据集包含6.5M行。我的Linux实例带有64GB RAM和4个核心。根据这个建议,我需要修复我的代码,但我认为从pyspark dataframe创建字典不应该很昂贵。请告诉我是否有其他计算方法。
我只想从我的pyspark dataframe中制作一个Python字典,这是我的pyspark dataframe的内容,
property_sql_df.show()
显示,
+--------------+------------+--------------------+--------------------+
| id|country_code| name| hash_of_cc_pn_li|
+--------------+------------+--------------------+--------------------+
| BOND-9129450| US|Scotron Home w/Ga...|90cb0946cf4139e12...|
| BOND-1742850| US|Sited in the Mead...|d5c301f00e9966483...|
| BOND-3211356| US|NEW LISTING - Com...|811fa26e240d726ec...|
| BOND-7630290| US|EC277- 9 Bedroom ...|d5c301f00e9966483...|
| BOND-7175508| US|East Hampton Retr...|90cb0946cf4139e12...|
+--------------+------------+--------------------+--------------------+
我想要的是以 hash_of_cc_pn_li 作为键,id 作为列表值的字典。 预期输出
{
"90cb0946cf4139e12": ["BOND-9129450", "BOND-7175508"]
"d5c301f00e9966483": ["BOND-1742850","BOND-7630290"]
}
到目前为止我尝试过的:
%%time
duplicate_property_list = {}
for ind in property_sql_df.collect():
hashed_value = ind.hash_of_cc_pn_li
property_id = ind.id
if hashed_value in duplicate_property_list:
duplicate_property_list[hashed_value].append(property_id)
else:
duplicate_property_list[hashed_value] = [property_id]
现在在控制台上显示的内容:
java.lang.OutOfMemoryError: Java heap space
并且在Jupyter笔记本输出上显示此错误。
ERROR:py4j.java_gateway:An error occurred while trying to connect to the Java server (127.0.0.1:33097)
df.groupby("hash_of_cc").agg(collect_list("id")).show()
。然后再仔细查看并决定是否真的需要将完整的数据框收集到驱动程序中。 - mazaneicha