簡體   English   中英

Spark RDD和Dataframe變換優化

[英]Spark RDD and Dataframe transformation optimisation

我是 Spark 的新手,並且有以下關於 RDD 和 Dataframe 的高級問題,如果我沒記錯的話,它們是建立在 RDD 之上的:

我知道可以對 RDD 進行兩種類型的操作,即轉換和操作。 我也明白,只有在對作為該轉換產品的 RDD 執行操作時,才會執行轉換。 鑒於 RDD 在 memory 中,我想知道是否有可能優化這些 RDD 消耗的 memory 的數量,舉個例子:

KafkaDF = KafkaDFRaw.select(
        KafkaDFRaw.key,
        KafkaDFRaw.value,
        KafkaDFRaw.topic,
        unix_timestamp('timestamp',
                       'yyyy-MM-dd HH:mm:ss').alias('kafka_arrival_time')
    ).withColumn("spark_arrival_time", udf(time.time, DoubleType())())

我有一個 KafkaDFRaw dataframe 並且我生產了一個名為 KafkaDF 的新 RDD。 然后我希望將列添加到這個新的 RDD。 我應該將它們添加到現有的 RDD 中嗎? 像這樣:

decoded_value_udf = udf(lambda value: value.decode("utf-8"))
    KafkaDF = KafkaDF\
        .withColumn(
            "cleanKey", decoded_value_udf(KafkaDF.key))\
        .withColumn(
            "cleanValue", decoded_value_udf(KafkaDF.value))

或者我應該從最后一個創建一個新的 dataframe ? 像這樣:

decoded_value_udf = udf(lambda value: value.decode("utf-8"))
    KafkaDF_NEW = KafkaDF\
        .withColumn(
            "cleanKey", decoded_value_udf(KafkaDF.key))\
        .withColumn(
            "cleanValue", decoded_value_udf(KafkaDF.value))

這對 memory 優化有影響嗎?

預先感謝您的幫助。

每當調用該操作時,都會執行優化的 dag,並按照計划使用 memory。 可以對比執行計划來了解:

df.explain(true)
df_new.explain(true)

在兩者之間創建額外的變量來保存轉換不會影響 memory 的利用率。 Memory 要求將取決於數據大小、分區大小、洗牌等。

暫無
暫無

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

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