Python Spark在哪里存储RDD´;正在进行的Spark应用程序中的s和Spark数据帧

Python Spark在哪里存储RDD´;正在进行的Spark应用程序中的s和Spark数据帧,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我在Kubernetes运行Spark,作为独立的Spark群集管理器,有两名Spark Worker。我使用Jupyter设置Spark应用程序。DeployMode设置为“客户端”,因此当驱动程序进程生成时,它将在Jupyter运行的Pod中运行。我们从AmazonS3代理读取一个带有request.get的CSV文件,并将其转换为RDD,然后再转换为Spark数据帧。对于从S3读取CSV文件,我们使用的不是spark.read方法,而是request.get()。从读取到触发数据帧的整个过

我在Kubernetes运行Spark,作为独立的Spark群集管理器,有两名Spark Worker。我使用Jupyter设置Spark应用程序。DeployMode设置为“客户端”,因此当驱动程序进程生成时,它将在Jupyter运行的Pod中运行。我们从AmazonS3代理读取一个带有request.get的CSV文件,并将其转换为RDD,然后再转换为Spark数据帧。对于从S3读取CSV文件,我们使用的不是spark.read方法,而是request.get()。从读取到触发数据帧的整个过程都发生在返回数据帧的函数中

S3PROXY == Url to proxy
def loadFromS3intoSparkDataframe(s3PathNameCsv):
    s3_rdd = spark2.sparkContext.parallelize(
                requests.get(S3PROXY + "/object", params="key={0}".format(s3PathNameCsv)).content.decode("UTF-8").split('\n'),24
            ).map(lambda x: x.split(','))
    header = s3_rdd.first()
    return s3_rdd.filter(lambda row:row != header).toDF(header)
用于存储此Spark数据帧的RAM消耗为5 gb,源CSV文件的大小仅为1 gb。5gb RAM消耗仍在驱动程序进程中。我的一些同事说,应该有一个选项将内存中的存储永久地传输到Spark Worker节点和Spark执行器。据我所知,这只能通过persist()或cache()进行复制

所以我的问题是,我的理解是否正确,默认情况下RDD和数据帧存储在驱动程序进程内存中?如果是这样,是否有可能将Spark应用程序整个存在过程中的变量传递给执行者?1到5 gb的数据转换是否不常见

解决方案:

我们没有使用正确的方法加载csv。如果不想将数据存储在驱动程序内存中,可以使用spark.read.csv()函数