Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在pyspark中动态地将一列转换为多行?_Apache Spark_Pyspark_Pivot_Transpose - Fatal编程技术网

Apache spark 如何在pyspark中动态地将一列转换为多行?

Apache spark 如何在pyspark中动态地将一列转换为多行?,apache-spark,pyspark,pivot,transpose,Apache Spark,Pyspark,Pivot,Transpose,我有一个如下所示的数据框 科尔曼 A. B C D E F G H 我 J K L 您可以添加一些辅助列来透视数据帧: import pyspark.sql.functions as F x = 3 result = df.withColumn( 'id', F.monotonically_increasing_id() ).withColumn( 'id2', (F.col('id') / x).cast('int') ).withColumn( '

我有一个如下所示的数据框

科尔曼 A. B C D E F G H 我 J K L
您可以添加一些辅助列来透视数据帧:

import pyspark.sql.functions as F

x = 3

result = df.withColumn(
    'id',
    F.monotonically_increasing_id()
).withColumn(
    'id2',
    (F.col('id') / x).cast('int')
).withColumn(
    'id3',
    F.col('id') % x
).groupBy('id2').pivot('id3').agg(F.first('ColName')).orderBy('id2').drop('id2')

result.show()
+---+---+---+
|  0|  1|  2|
+---+---+---+
|  a|  b|  c|
|  d|  e|  f|
|  g|  h|  i|
|  j|  k|  l|
+---+---+---+

您可以结合使用
收集列表
行编号
来实现此目的

步骤1:生成自定义行号

from pyspark.sql.functions import floor, row_number, collect_list
from pyspark.sql.window import Window

no_of_columns = 3

df2 = df.withColumn("row_num", floor((row_number().over(Window.orderBy("ColName"))-1)/no_of_columns))
步骤2:使用此行号对数据分组,并使用
收集列表
创建列表

df3 = df2.groupBy("row_num").agg(collect_list("ColName").alias("col_list"))
步骤3:使用python的列表理解从列表中选择所有元素

df3.select(*[df3.col_list[i].alias(f"col{i+1}") for i in range(no_of_columns)]).show()
输出:

+----+----+----+
|col1|col2|col3|
+----+----+----+
|   a|   b|   c|
|   d|   e|   f|
|   g|   h|   i|
|   j|   k|   l|
+----+----+----+

注意:参数
no\u of_columns
可以根据所需的输出列数进行更改。

如果“x”的值是参数化的,并且可以根据调用该代码的人进行更改,则该参数是否有效?是的,您可以尝试更改x的值,只要其值合理,该参数仍然有效