当前位置: 首页 > 知识库问答 >
问题:

使用Performit select操作重命名PySpark DataFrame中的列

韦原
2023-03-14

还有其他关于如何重命名PySpark DataFrame中的列的线程,请参见这里、这里和这里。我不认为现有的解决方案具有足够的性能或通用性(我有一个应该更好的解决方案,但我被一个边缘情况bug所困扰)。让我们从回顾当前解决方案中的问题开始:

  • 重复调用withcolumnremistrated可能会遇到与多次调用withcolumn相同的性能问题,如本博客文章所述。请参见此答案中的选项2。
  • toDF方法依赖于模式推断,不一定保留列的nullable属性(在生产代码中应该避免toDF)。我想这种方法也很慢。
  • 这种方法很接近,但不够通用,而且对于许多列来说,手工操作太多(例如,如果您试图将2000个列名转换为snake_case)

我创建了一个泛型函数,它适用于所有列类型,但包含点的列名除外:

import pyspark.sql.functions as F

def with_columns_renamed(fun):
    def _(df):
        cols = list(map(
            lambda col_name: F.col(col_name).alias(fun(col_name)),
            df.columns
        ))
        return df.select(*cols)
    return _

假设您有以下数据frame:

+-------------+-----------+
|i like cheese|yummy stuff|
+-------------+-----------+
|         jose|          a|
|           li|          b|
|          sam|          c|
+-------------+-----------+

以下是如何用下划线替换列名中的所有空白:

def spaces_to_underscores(s):
    return s.replace(" ", "_")

df.transform(with_columns_renamed(spaces_to_underscores)).show()
+-------------+-----------+
|i_like_cheese|yummy_stuff|
+-------------+-----------+
|         jose|          a|
|           li|          b|
|          sam|          c|
+-------------+-----------+
+-------------+-----------+
|i.like.cheese|yummy.stuff|
+-------------+-----------+
|         jose|          a|
|           li|          b|
|          sam|          c|
+-------------+-----------+
def dots_to_underscores(s):
    return s.replace(".", "_")

df.transform(quinn.with_columns_renamed(dots_to_underscores))

共有1个答案

东郭远航
2023-03-14

你可以做一些像这样简单的事情,

import pyspark.sql.functions as F

def with_columns_renamed(fun):
    def _(df):
        cols = list(map(
            lambda col_name: F.col('`' + col_name + '`').alias(fun(col_name)),
            df.columns
        ))
        return df.select(*cols)
    return _
 类似资料:
  • 到目前为止,我们前面已经存建了一个 Python 的源代码文件,现在,要修改 main.py 文件的名称把它作为一个新的模块,假设这里要文件main.py的新名称为:module.py。 Git在文件名之前显示,表示文件已被重命名。 对于提交操作,需要使用标志,这使自动检测修改的文件。 提交后,新文件将更改推送到远程存储库。 上述命令将产生以下结果: 现在,其他开发人员可以通过使用命令更新本地存储

  • rename-command 例如:rename-command FLUSHALL “”。必须重启。

  • rename oldkey newkey 如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同 renamenx oldkey newkey 同上,但是如果newkey存在返回失败

  • 本文向大家介绍PowerShell批量文件重命名操作实例,包括了PowerShell批量文件重命名操作实例的使用技巧和注意事项,需要的朋友参考一下 总算发现PowerShell相对于CMD来说实用的地方了。 事情是这样的,我下载了一些美剧(抱歉,看完会删的),通常文件名都比较长,包含了很多我不需要的信息,,比如: 我想要的只是: 由于我需要的文件名是原文件名中固定的一部分,于是我想到了PowerS

  • 问题内容: 我们可以重命名文件说来? 如果存在,它将重命名吗? 如何将其重命名为已经存在的test1.txt文件,以便将test.txt的新内容添加到其中以供以后使用? 问题答案: 从http://exampledepot.8waytrips.com/egs/java.io/RenameFile.html复制 追加到新文件: