内存中的Spark数据

时间:2017-06-01 10:25:01

标签: apache-spark pyspark pyspark-sql

我正在使用PySpark SQL,我想从RedShift中检索表,将它们保存在内存中,然后应用一些连接和转换。 我想将连接和转换应用于内存数据,而不是将使用转换创建的sql计划直接应用于Redshift。

当我检索数据时,它只保存模式,对吧?

如果我使用createTempView(),它会在sparkcontext中保存一个视图而不是数据,对吗?

如果我在获取数据帧后使用cache(),它会将数据保存在内存中?接下来的转换应用于内存中吗?

df = manager.session.read.jdbc(url=url, table=table, properties={"driver": driver, "user": user, "password": password})

df1 = manager.session.read.jdbc(url=url, table=table1, properties={"driver": driver, "user": user, "password": password})

df2 = manager.session.read.jdbc(url=url, table=table2, properties={"driver": driver, "user": user, "password": password})

df_res = df.union(df2)

df_res = df_res.groupBy("seq_rec", "seq_res").agg({'impuesto': 'sum'}).withColumnRenamed("SUM(impuesto)", "pricing")

df_result = df.join(df_res, [df.seq == df_res.seq_rec, df.res == df_res.seq_res])

之后我将数据框保存为avro文件,并且在这里应用了所有转换?

1 个答案:

答案 0 :(得分:1)

  

当我检索数据时,它只保存模式,对吧?

是的,这是正确的。

  

如果我使用createTempView(),它会在sparkcontext中保存一个视图而不是数据,对吗?

同样在这里。

  

如果我在获取数据帧后使用cache(),它会将数据保存在内存中?接下来的转换应用于内存中吗?

没有。当数据集首次加载时,它可以缓存内存中的数据,其中分数取决于可用资源。它不会急切地获取数据。

SQL中有一个旧的,更长的文档CACHE TABLE,它曾被用来急切地获取数据并尝试缓存它。

spark.sql("CACHE TABLE foo")