我在pyspark中有一个大约有150列的数据框。这些列是通过连接不同的表获得的。现在我的要求是将数据帧写入文件,但是按照特定的顺序,例如首先写入1到50列,然后是第90到110列,然后是第70和第72列。这就是我想只选择特定的列并重新排列它们。 / p>
我知道其中一种方法是使用df.select("给你的列顺序")但在我的情况下,列非常大,不可能写出每一列名称在'选择'。
请告诉我如何在pyspark中实现这一目标。
注意 - 我无法提供任何样本数据,因为列数非常大,而且我的情况下列号是主要的道路拦截器。
答案 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|
+-----+-----+-----+-----+-----+-----+