gpt4 book ai didi

apache-spark - 如何在 Python 中排除 Spark 数据框中的多列

转载 作者:行者123 更新时间:2023-12-03 10:31:36 25 4
gpt4 key购买 nike

我发现 PySpark 有一个方法叫做 drop但它似乎一次只能删除一列。关于如何同时删除多个列的任何想法?

df.drop(['col1','col2'])
TypeError                                 Traceback (most recent call last)
<ipython-input-96-653b0465e457> in <module>()
----> 1 selectedMachineView = machineView.drop([['GpuName','GPU1_TwoPartHwID']])

/usr/hdp/current/spark-client/python/pyspark/sql/dataframe.pyc in drop(self, col)
1257 jdf = self._jdf.drop(col._jc)
1258 else:
-> 1259 raise TypeError("col should be a string or a Column")
1260 return DataFrame(jdf, self.sql_ctx)
1261

TypeError: col should be a string or a Column

最佳答案

只需 select :

df.select([c for c in df.columns if c not in {'GpuName','GPU1_TwoPartHwID'}])

或者如果你真的想使用 drop然后 reduce应该做的伎俩:
from functools import reduce
from pyspark.sql import DataFrame

reduce(DataFrame.drop, ['GpuName','GPU1_TwoPartHwID'], df)

备注 :

(执行时间不同):

在数据处理时间方面应该没有区别。虽然这些方法生成不同的逻辑计划,但物理计划完全相同。

然而,当我们分析驱动程序端代码时,有一个区别:
  • 第一种方法只进行一次 JVM 调用,而第二种方法必须为必须排除的每一列调用 JVM
  • 第一种方法生成逻辑计划,相当于物理计划。在第二种情况下,它被重写。
  • 最后,Python 中的理解比 map 之类的方法要快得多。或 reduce
  • Spark 2.x+ drop 中支持多列.见 SPARK-11884 (在 DataFrame API 中删除多个列)和 SPARK-12204 (在 SparkR 中为 DataFrame 实现 drop 方法)用于详细信息。
  • 关于apache-spark - 如何在 Python 中排除 Spark 数据框中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674490/

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