火花数据帧不持久也能清除模板吗?

时间:2020-07-27 16:37:06

标签: apache-spark apache-spark-sql apache-spark-dataset

我正在尝试解决spark scala应用程序中的堆内存问题,并试图了解其泄漏的内存资源在哪里。我正在加载数据以生成spark datafraame,并在其之上具有临时表。 当我取消持久化时,默认情况下该表也将被清除吗?我尝试在测试程序中对此进行模拟,但是行为不一致

 val data = Seq(Row("1","2020-05-11 15:17:57.188","2020"))
    val schemaOrig = List( StructField("key",StringType,true)
                          ,StructField("txn_ts",StringType,true)
                          ,StructField("txn_dt",StringType,true))
    
    val sourceDf =  spark.createDataFrame(spark.sparkContext.parallelize(data),StructType(schemaOrig))
    sourceDf.createOrReplaceTempView("sourceTable")
    
    sourceDf.unpersist()
    

现在,如果我尝试查询临时表并希望它重新计算整个RDD世系。

    spark.sql("select * from sourceTable").show
    
    [Stage 0:>                                                          (0 + 0) / 
    +---+--------------------+------+
    |key|              txn_ts|txn_dt|
    +---+--------------------+------+
    |  1|2020-05-11 15:17:...|  2020|
    +---+--------------------+------+

现在我做一个dataframe.show看看是否再次重新计算

scala> sourceDf.show
[Stage 2:>                                                          (0 + 0) / 1]

+---+--------------------+------+
|key|              txn_ts|txn_dt|
+---+--------------------+------+
|  1|2020-05-11 15:17:...|  2020|
+---+--------------------+------+

现在尝试取消持久化数据框并立即调用节目。因为unpersist被称为,它应该重新计算,但看起来却不是。所以问题是 1)坚持不懈会立即清除内存吗? 2)临时表和数据帧的存储位置是相同还是完全独立?

scala> sourceDf.unpersist
res5: sourceDf.type = [key: string, txn_ts: string ... 1 more field]

scala> sourceDf.show
+---+--------------------+------+
|key|              txn_ts|txn_dt|
+---+--------------------+------+
|  1|2020-05-11 15:17:...|  2020|
+---+--------------------+------+

0 个答案:

没有答案