簡體   English   中英

DataFrame持久不會提高Spark的性能

[英]DataFrame persist does not improve performance in Spark

我正在編寫一個Scala腳本,該腳本從表讀取數據,轉換數據並使用Spark顯示結果。 我正在使用Spark 2.1.1.2和Scala 2.11.8。 我在腳本中使用了兩次數據框實例(以下代碼中的df2 。)。 由於數據幀是在調用操作時計算的,而不是在聲明它們時計算的,因此我預計此數據幀將被計算兩次。 我認為持久化此數據框會提高性能,因為認為該數據框將被計算一次(持久化時),而不是兩次(如果持久化)。

但是,與不堅持時相比,當我堅持時腳本運行的時間要長〜10秒。 我不知道是什么原因。 如果有人有想法,將不勝感激。

我的提交命令行如下:

spark-submit --class TestQuery --master yarn --driver-memory 10G --executor-memory 10G --executor-cores 2 --num-executors 4 /home/bcp_data/test/target/TestQuery-1.0-SNAPSHOT.jar

Scala腳本如下:

 val spark = SparkSession
             .builder()
             .appName("TestQuery")
             .config("spark.sql.warehouse.dir", "file:/tmp/hsperfdata_hdfs/spark-warehouse/")
             .enableHiveSupport()
             .getOrCreate()


 val m = spark.sql("select id, startdate, enddate, status from members")
 val l = spark.sql("select mid, no, status, potential from log")
 val r = spark.sql("select mid, code from records")

val df1 =  m.filter(($"status".isin(1,2).and($"startdate" <= one_year_ago)).and((($"enddate" >= one_year_ago)))

val df2 = df1.select($"id", $"code").join(l, "mid").filter(($"status".equalTo(1)).and($"potential".notEqual(9))).select($"no", $"id", $"code")
df2.persist

val df3 = df2.join(r, df2("id").equalTo(r("mid"))).filter($"code".isin("0001","0010","0015","0003","0012","0014","0032","0033")).groupBy($"code").agg(countDistinct($"no"))


val fa = spark.sql("select mid, acode from actions")
val fc = spark.sql("select dcode, fcode from params.codes")

val df5 = fa.join(fc, fa("acode").startsWith(fc("dcode")), "left_outer").select($"mid", $"fcode")
val df6 = df2.join(df5, df2("id").equalTo(df5("mid"))).groupBy($"code", $"fcode")

println("count1: " + df3.count + " count2: " + df6.count)

在這里使用緩存是正確的選擇,但是您的聲明

df2.persist

無效,因為您不使用返回的數據框。 做就是了

val df2 = df1.select($"id", $"code")
.join(l, "mid")
.filter(($"status".equalTo(1)).and($"potential".notEqual(9)))
.select($"no", $"id", $"code")
.persist

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM