gpt4 book ai didi

python - 在 pyspark 数据框中,当我重命名列时,以前的名称仍可用于过滤。错误或功能?

转载 作者:行者123 更新时间:2023-12-05 05:43:57 25 4
gpt4 key购买 nike

我使用包含字符串类型列的 PySpark 数据框处理 DataBricks。我使用 .withColumnRenamed() 重命名其中一个。稍后在此过程中,我使用 .filter() 来选择包含特定子字符串的行。我不小心使用了旧的列名,它仍然运行过滤器并产生“正确”的结果,就好像我使用了新的列名一样。我的问题是:这是错误还是功能?

我在一个简单的情况下复现了这个问题:

_test = sqlContext.createDataFrame([("abcd","efgh"), ("kalp","quarto"), ("aceg","egik")], [ 'x1', 'x2'])
_test.show()

+----+------+
| x1| x2|
+----+------+
|abcd| efgh|
|kalp|quarto|
|aceg| egik|
+----+------+

_test2 = _test.withColumnRenamed('x1', 'new')

_test2.filter("x1 == 'aceg'").show()

+----+----+
| new| x2|
+----+----+
|aceg|egik|
+----+----+
_test2.filter("substring(x1,1,2) == 'ka'").show()
+----+------+
| new| x2|
+----+------+
|kalp|quarto|
+----+------+

我预计过滤器命令会出错,因为“_test2”中不再存在列 x1。奇怪的是输出显示的是新名称("new")。

另一个例子:

_test2.filter("substring(x1,1,1) == 'a'").show()

给予

+----+----+
| new| x2|
+----+----+
|abcd|efgh|
|aceg|egik|
+----+----+

_test2.filter("substring(x1,1,1) == 'a'").filter(F.col('x1') == 'abcd').show() 给出

+----+----+
| new| x2|
+----+----+
|abcd|efgh|
+----+----+

但是 _test2.select(['x1', 'x2']).show() 会抛出 'x1' 不存在的错误。

最佳答案

这是 Spark 的已知问题。社区决定不修复它。看到这个相关jira获取更多信息。

关于python - 在 pyspark 数据框中,当我重命名列时,以前的名称仍可用于过滤。错误或功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71706419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com