美好的一天。
我是新手,希望能有个更好的建议 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:什么时候程序中的数据帧被破坏(无法访问),程序完成后是什么时候?
答案 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相同。
当您要对中间数据帧执行操作时,第一个选项很有用。