更好的方法是,创建单独的数据框或引用相同名称的数据框

时间:2019-04-22 13:47:24

标签: apache-spark pyspark

美好的一天。

我是新手,希望能有个更好的建议 1.每次完成新的转换时都创建一个新的数据框 2.转换后使用与先前数据框名称相同的名称

我经历了其他stackoverflow问题以及rdd和dataframe指南,但无法找到解决方案。

选项1:

df=spark.read.format("csv").option("header", "true").load("csvfile.csv")
df1=df.filter(col('country')=='India')
df2=df1.groupBy("State").agg(max("GDP"), sum("expense"))

选项2:

df=spark.read.format("csv").option("header", "true").load("csvfile.csv")
df=df.filter(col('country')=='India')
df=df.groupBy("State").agg(max("GDP"), sum("expense"))

选项2是否占用较少的内存,因为在某个时间点只能访问最新的数据帧,而在选项1时我们可以访问所有数据帧。

问题2:什么时候程序中的数据帧被破坏(无法访问),程序完成后是什么时候?

1 个答案:

答案 0 :(得分:1)

Spark具有惰性计算,因此将在执行某些操作后将数据带给驱动程序(而不是像传统编程那样分配给任何变量)。这种方法在内存使用上没有显着差异。也许,您可以更频繁地(在书籍,教程等中)看到的是:

df=spark.read.format("csv").option("header", "true").load("csvfile.csv")

df.filter(col('country')=='India') \
  .groupBy("State") \
  .agg(max("GDP"), sum("expense"))

但这与选项2相同。

当您要对中间数据帧执行操作时,第一个选项很有用。