[英]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.