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