繁体   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