簡體   English   中英

從pyspark中的非常大的數據框中選擇隨機列

[英]select random columns from a very large dataframe in pyspark

我在pyspark中有一個大約150列的數據框。 這些列是通過連接不同的表獲得的。 現在,我的要求是將數據幀寫入文件,但要以特定的順序進行,例如首先寫入1至50列,然后寫入90至110列,然后寫入70和72列。那就是我只選擇特定的列並重新排列它們。

我知道一種方法是使用df.select(“ give your column order”),但在我的情況下,列非常大,不可能在“ select”中寫入每個列的名稱。

請告訴我如何在pyspark中實現這一目標。

注意-我無法提供任何示例數據,因為列數非常大,而列數是我的主要障礙。

您可以以編程方式創建列列表

first_df.join(second_df, on-'your_condition').select([column_name for column_name in first_df.columns] + [column_name for column_name in second_df.columns])

您可以使用random.sample(first_df.columns, number_of_columns)函數選擇列的隨機子集。

希望這可以幫助 :)

聽起來您要做的就是以編程方式返回列名稱列表,從該列表中挑選出一個或多個切片,然后以某種順序從數據框中選擇該列的子集。 您可以通過操作列表df.columns來執行此操作。 舉個例子:

a=[list(range(10)),list(range(1,11)),list(range(2,12))]
df=sqlContext.createDataFrame(a,schema=['col_'+i for i in 'abcdefghij'])

df是具有列['col_a', 'col_b', 'col_c', 'col_d', 'col_e', 'col_f', 'col_g', 'col_h', 'col_i', 'col_j'] 您可以通過調用df.columns來返回該列表,您可以像對其他任何python列表一樣進行切片和重新排序。 具體如何操作以及您要從df中選擇哪些列以及以哪種順序決定。 例如:

mycolumnlist=df.columns[8:9]+df.columns[0:5]
df[mycolumnlist].show()

返回

+-----+-----+-----+-----+-----+-----+
|col_i|col_a|col_b|col_c|col_d|col_e|
+-----+-----+-----+-----+-----+-----+
|    8|    0|    1|    2|    3|    4|
|    9|    1|    2|    3|    4|    5|
|   10|    2|    3|    4|    5|    6|
+-----+-----+-----+-----+-----+-----+

暫無
暫無

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

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