如何判断Spark会话是否能够保存数据帧中的数据大小?

时间:2019-10-30 02:12:16

标签: apache-spark

打算使用pyspark(在本地模式下运行)从Oracle DB读取数据,并以实木复合地板的形式本地存储。是否有办法判断Spark会话数据框是否能够保存查询中的数据量(将是整个表,即select * from mytable)?如果数据无法容纳在数据框中,是否有通用的解决方案?

*看到了类似的问题here,但评论中的讨论对此感到有些困惑

2 个答案:

答案 0 :(得分:0)

由于您在本地运行,所以我假设它不在群集上。您不能确切地说需要多少内存?但是,您可以接近它。您检查各自的表大小,确定正在使用多少磁盘空间。假设您mytable已占用1GB的硬盘,那么spark需要的RAM会更多,因为Spark的引擎需要一些内存来进行自身处理。尝试多添加2GB,以便比实际表大小更安全。

要检查Oracle中的表大小,可以使用以下查询:

select segment_name,segment_type,bytes/1024/1024 MB
 from dba_segments
 where segment_type='TABLE' and segment_name='<yourtablename>';

它将在MB中给出结果。

要在Apache-Spark中配置与JVM相关的参数,可以选中this

答案 1 :(得分:0)

以分布式方式运行spark并不重要。如果发生以下情况,您将需要担心内存问题:-

  1. 您正在读取驱动程序中的数据,然后进行广播。
  2. 缓存数据帧以进行一些计算。

通常对于您的spark应用程序,将生成DAG,如果您使用的是JDBC源,则工作人员将直接读取数据,并使用混洗空间和堆外磁盘来进行内存密集型计算。