如何在pyspark的堆栈函数中使用带空格的列名

How to use column names with spaces in stack function in pyspark

我试图对数据框进行逆轴旋转,而数据框具有以下结构

fstcol 第 1 列 第 2 列
一个 1 4
一个 2 5
一个 3 6

我想要这样的数据框:

fstcol col_name
一个 第 1 栏 1
一个 第 1 栏 2
一个 第 1 栏 3
一个 第 2 列 4
一个 第 2 栏 5
一个 第 2 栏 6

我写了下面的代码来转换:

df.selectExpr("fstcol","stack(2, 'col 1', col 1, 'col 2', col 2)")

但是,我收到一个错误,因为列名称包含 space。无法获取 'col 1' 和 'col 2' 的列值。

谁能帮我解决这个问题?

您可以像下面这样使用backticks

df.selectExpr("fstcol","stack(2, 'col 1', `col 1`, 'col 2', `col 2`)")

您必须使用反引号:

df.selectExpr("fstcol", "stack(2, 'col 1', `col 1`, 'col 2', `col 2`) as (col_name, value)")