打算使用pyspark(在本地模式下运行)从Oracle DB读取数据,并以实木复合地板的形式本地存储。是否有办法判断Spark会话数据框是否能够保存查询中的数据量(将是整个表,即select * from mytable
)?如果数据无法容纳在数据框中,是否有通用的解决方案?
*看到了类似的问题here,但评论中的讨论对此感到有些困惑
答案 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并不重要。如果发生以下情况,您将需要担心内存问题:-
通常对于您的spark应用程序,将生成DAG,如果您使用的是JDBC源,则工作人员将直接读取数据,并使用混洗空间和堆外磁盘来进行内存密集型计算。