从pyspark中的一个非常大的数据框中选择随机列

时间:2017-07-14 13:04:42

标签: python pyspark

我在pyspark中有一个大约有150列的数据框。这些列是通过连接不同的表获得的。现在我的要求是将数据帧写入文件,但是按照特定的顺序,例如首先写入1到50列,然后是第90到110列,然后是第70和第72列。这就是我想只选择特定的列并重新排列它们。 / p>

我知道其中一种方法是使用df.select("给你的列顺序")但在我的情况下,列非常大,不可能写出每一列名称在'选择'。

请告诉我如何在pyspark中实现这一目标。

注意 - 我无法提供任何样本数据,因为列数非常大,而且我的情况下列号是主要的道路拦截器。

2 个答案:

答案 0 :(得分:0)

您可以通过编程方式创建列列表

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)函数选择列的随机子集。

希望这会有所帮助:)

答案 1 :(得分:0)

听起来你要做的就是以编程方式返回列名列表,从该列表中挑选一些切片或切片,然后从数据帧中按某种顺序选择列的子集。您可以通过操作列表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|
+-----+-----+-----+-----+-----+-----+