从 Pyspark 数据帧创建字典显示 OutOfMemoryError: Java 堆空间

2023-12-23

我见过并尝试过很多existing https://stackoverflow.com/questions/37335/how-to-deal-with-java-lang-outofmemoryerror-java-heap-space-errorStackOverflow 发布了有关此问题的帖子,但没有任何效果。我猜我的 JAVA 堆空间没有我的大型数据集预期的那么大,我的数据集包含 650 万行。我的 Linux 实例包含 4 核 64GB RAM。按照这个建议 https://stackoverflow.com/questions/37335/how-to-deal-with-java-lang-outofmemoryerror-java-heap-space-error我需要修复我的代码,但我认为从 pyspark 数据帧制作字典应该不会很昂贵。如果有其他计算方法,请告诉我。

我只想从我的 pyspark 数据帧创建一个 python 字典,这是我的 pyspark 数据帧的内容,

property_sql_df.show() shows,

+--------------+------------+--------------------+--------------------+
|            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 制作一本字典key和 id 作为a list value.

预期输出

{
  "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堆空间

并显示此错误Jupyter 笔记本输出

ERROR:py4j.java_gateway:An error occurred while trying to connect to the Java server (127.0.0.1:33097)

从 pyspark 数据帧制作字典应该不会很昂贵

就运行时而言确实如此,但这很容易占用大量空间。特别是如果你正在做property_sql_df.collect(),此时您将整个数据帧加载到驱动程序内存中。在 650 万行中,如果每行有 10KB 或 10K 个字符,那么您就已经达到 65GB,而且我们甚至还没有访问字典。

首先,您可以只收集您需要的列(例如,不收集name)。其次,您可以在 Spark 中进行上游聚合,这将节省一些空间,具体取决于有多少id是否有每hash_of_cc_pn_li:

rows = property_sql_df.groupBy("hash_of_cc_pn_li") \
  .agg(collect_set("id").alias("ids")) \
  .collect()

duplicate_property_list = { row.hash_of_cc_pn_li: row.ids for row in rows }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Pyspark 数据帧创建字典显示 OutOfMemoryError: Java 堆空间 的相关文章

随机推荐

  • Python:检查列表中至少一个正则表达式是否与字符串匹配的优雅方法

    我有一个 python 中的正则表达式列表和一个字符串 有没有一种优雅的方法来检查列表中的至少一个正则表达式是否与字符串匹配 我所说的优雅 是指比简单地循环所有正则表达式并根据字符串检查它们并在找到匹配项时停止更好的方法 基本上 我有这个代
  • 跨一对多关系选择 COUNT

    对于两张桌子 player and team 对于 1 关系 球员与球队 您如何计算每个球队有多少球员 失败的尝试 SELECT team teamid SELECT COUNT player team FROM player FROM t
  • Django 注释总和

    我正在尝试对查询集中包含多行的列进行简单求和 我的直接问题是 a 我该如何设置get queryset 包括一列的总和以及 b 如何访问模板中的该元素 下列的this https stackoverflow com questions 86
  • Python正则表达式匹配:## ##

    我正在逐行搜索文件中是否出现 random string 除了多个 的情况外 它都有效 pattern prog re compile pattern string lala hey there result prog search str
  • 优化 R 中的买入和卖出信号

    我需要优化现有的买入和卖出信号 就像 r 中的 backtrader 一样 Signal会看起来像 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 where 1 持有 0 买入 1 卖出 优化信号后应该是 1 1
  • Octave信号包安装

    我使用的是 Ubuntu 16 04 目前使用 Octave 作为 Matlab 的倒数进行信号处理 一切都很好 直到我需要使用medfilt1函数来获取中位数 Octave 生成 了一个错误报告 指出我的系统上未安装信号包 浏览了一下后我
  • 如何从 Int 进行转换?到字符串

    在 Swift 中 我无法通过以下方式将 Int 转换为 String var iString Int 100 var strString String iString 但是我的变量是 Int 吗 有错误 Cant invoke init
  • 使用 Webpack 连接并缩小所有 less 文件而不导入它们

    我有一个包含大约 20 个独立的较少文件的文件夹 我需要通过 Webpack 将它们连接成一个文件并将其存储在我的 dist 文件夹中 我当前的Webpack配置文件如下 const path require path const webp
  • IBOutlet 何时初始化?

    我通过 Interface Builder 设置了文本视图的出口 文本视图加载正常 但是我无法以编程方式访问它的任何属性 因为出口始终是nil 什么时候实例化 即使在我之后applicationDidFinishLoading被调用 它仍然
  • 禁用 JList 单元格选择属性

    我正在尝试显示一个array of strings in a JList 然后将其添加到JPanel using Java Swing 我在显示数据时没有问题Jlists 但是我想删除允许用户选择项目的默认属性Jlist 我试图简单地向用户
  • 在无向图中查找循环(​​boost)并返回其顶点和边

    我需要一个在无向图中找到循环 提升 并返回其顶点和边的函数 它只需要返回图中一个周期的顶点 边 我的问题是 使用 boost 来做到这一点的最佳方法是什么 我没有使用它的经验 我不知道Boost 但是here https stackover
  • Node.js 事件循环

    Node js I O 事件循环是单线程还是多线程 如果我有多个 I O 进程 节点会将它们放入外部事件循环中 它们是按顺序处理 首先是最快的 还是处理事件循环以同时处理它们 以及哪些限制 事件循环 Node js 事件循环在单个线程下运行
  • 在 Orchard CMS 中将不同的 CSS 文件添加到不同的页面?

    假设 Orchard CMS 中有两个页面 主页和关于我们页面 我想在主页上使用 RoyalSlider 它有自己的 CSS 文件 如何仅将其包含在主页上而不包含在 关于我们 页面上 在 Orchard CMS 中 我使用 Contoso
  • Android 地图 v2 在第二次充气时出现错误

    我正在尝试在我的应用程序中使用新的 Android 地图 我有一个 FragmentActivity 其布局包含 除其他外
  • scoverage:结合 test 和 it:test 的覆盖率

    我用过滤器分割了单元测试和集成测试 lazy val FunTest config it extend Test def funTestFilter name String Boolean name endsWith Spec def un
  • 正则表达式选择多行字符串中的最后一行

    我有一个 ANT 脚本 它有一个属性 其值可以是一行或多行 例如 财产 prop1 A 12 1 REL B121000 10 18 2011 1700 A 12 1 REL B121001 10 25 2011 6059 A 12 1 R
  • 获取 NullPointerException:尝试在 Android 中读取字节数组时尝试获取 Parcelable 中空数组的长度

    我有一个实现 Parcelable 的类 我的所有值都通过 writeToParcel 方法设置正常 但在构造函数中读取时 我遇到了引发 NullPointerException 的字节数组问题 public final class Pro
  • 字符串被分配给列表而没有编译错误[重复]

    这个问题在这里已经有答案了 据我所知 Java 中泛型的主要目的之一是提供编译时类型安全 如果它被编译 代码将毫无问题地运行 那么为什么下面的代码会被编译呢 public static void main String args Strin
  • Python与selenium并行执行

    我对使用 selenium 在 python 中并行执行感到困惑 似乎有几种方法可以解决这个问题 但有些似乎已经过时了 有一个名为的 python 模块python wd parallel好像有一些功能可以做到这一点 但这是 2013 年的
  • 从 Pyspark 数据帧创建字典显示 OutOfMemoryError: Java 堆空间

    我见过并尝试过很多existing https stackoverflow com questions 37335 how to deal with java lang outofmemoryerror java heap space er