簡體   English   中英

將帶有隨機生成的假數據的動態 dataframe 轉換為 static dataframe

[英]Convert dynamic dataframe with randomly generated fake data to static dataframe

我正在嘗試將一列假數據添加到 dataframe 中。 dataframe 的內容是什么並不重要。 我只想添加一列隨機生成的假數據,例如,隨機生成的名字,每行一個名字。 這是一些可以使用的虛擬數據,但我再說一遍,dataframe 的內容無關緊要:

from faker import Faker

faker = Faker("en_GB")

contact = [faker.profile() for i in range(0, 100)]
contact = spark.createDataFrame(contact)

我正在嘗試創建一個 class 函數來為不同的列執行此操作,如下所示:

class anonymise:
        
    @staticmethod
    def FstName():
        def FstName_values():
            faker = Faker("en_GB")
            return faker.first_name()

        FstName_udf = udf(FstName_values, StringType())
        return FstName_udf()

上面的 class 有一個 function 作為示例,但實際的 class 具有完全相同模板的多個功能,只是針對不同的列,例如 LastName。

然后,我在新列中添加如下:

contact = contact \
.withColumn("FstName", anonymise.FstName())

我正在使用這個過程將真實數據替換為逼真的、虛假的、隨機生成的數據。

似乎工作正常並且運行迅速。 但是,我注意到每次顯示新的 dataframe 時,它都會嘗試生成一個全新的列:

第一次嘗試: 在此處輸入圖像描述

在第一次之后立即嘗試第二次: 在此處輸入圖像描述

這意味着 dataframe 不僅僅是一個 static dataframe 與數據,它將嘗試為每個后續命令生成一個新列。 當我嘗試將數據寫入外部文件時,這會導致我進一步出現問題。

我希望它使用一些易於調用的 static 數據生成一次列。 我什至不希望它重新生成相同的數據。 生成過程應該發生一次。

我嘗試復制到 pandas dataframe 但 dataframe 太大而無法正常工作(1.3+ 百萬行),我似乎無法將較小的版本寫入外部文件。

對此問題的任何幫助表示贊賞!

非常感謝,

卡羅來納

由於您使用的是 spark,因此它正在跨多個節點進行計算。 您可以嘗試在匿名化后添加一個contact.persist()。

您可以在此處閱讀有關持久性的更多信息。

所以最后這是一個非常簡單的修復......

通過將faker = Faker("en_GB")放入 function 中,我為每一行生成了一個faker實例。 我只需要從 function 中刪除它並在 class 之外生成實例。 所以現在,雖然每次調用命令時它都會生成數據,但即使對於大型數據幀,它也會非常快,而且我沒有遇到任何后續命令的問題。

暫無
暫無

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

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