Col naco:PySparkDataFrame列参考:df.colvs.df['col']vs.F.col('col')

我有一个概念,我希望你能帮助澄清:

在 PySpark 数据框中引用列的以下三种方式有什么区别。我知道不同的情况需要不同的形式,但不知道为什么。

df.col:e.g. F.count(df.col) df['col']:e.g. df['col'] ==0 F.col('col'):e.g. df.filter(F.col('col').isNull())

非常感谢!

32

在大多数实际应用中,几乎没有区别。但是,它们是通过调用不同的底层函数(source)来实现的,因此并不完全相同。

我们可以用一个小例子来说明:

df = spark.createDataFrame(
    [(1,'a', 0), (2,'b',None), (None,'c',3)], 
    ['col', '2col', 'third col']
)
df.show()
#+----+----+---------+
#| col|2col|third col|
#+----+----+---------+
#|   1|   a|        0|
#|   2|   b|     null|
#|null|   c|        3|
#+----+----+---------+
1.df.col

这是最不灵活的。您只能引用使用.运算符可有效访问的列。这排除了包含空格或特殊字符的列名以及以整数开头的列名。

此语法调用df.__getattr__("col")

print(df.__getattr__.__doc__)
#Returns the :class:`Column` denoted by ``name``.
#
#        >>> df.select(df.age).collect()
#        [Row(age=2), Row(age=5)]
#
#        .. versionadded:: 1.3

使用.语法,您只能访问此示例数据帧的第一列。

>>> df.2col
  File "<ipython-input-39-8e82c2dd5b7c>", line 1
    df.2col
       ^
SyntaxError: invalid syntax

在引擎盖下,它检查列名是否包含在df.columns中,然后返回指定的pyspark.sql.Column

2.df["col"]

这将调用df.__getitem__。您可以更灵活地执行__getattr__可以执行的所有操作,还可以指定任何列名。

df["2col"]
#Column<2col> 

再一次,在引擎盖下检查一些条件,在这种情况下,返回由输入字符串指定的pyspark.sql.Column

此外,您可以传入多个列(如listtuple)或列表达式。

from pyspark.sql.functions import expr
df[['col', expr('`third col` IS NULL')]].show()
#+----+-------------------+
#| col|(third col IS NULL)|
#+----+-------------------+
#|   1|              false|
#|   2|               true|
#|null|              false|
#+----+-------------------+

请注意,在多列的情况下,__getitem__只是调用pyspark.sql.DataFrame.select

最后,您还可以按索引访问列:

df[2]
#Column<third col>
3.pyspark.sql.functions.col

这是 Spark 本机选择列的方式,并返回一个expression(这是所有列函数的情况),它根据给定的名称选择列。当您需要指定您想要的列而不是字符串文字时,这是有用的速记。

例如,假设我们想要创建一个新列,该列将根据"2col"的值接受"col""third col"的值:

from pyspark.sql.functions import when
df.withColumn(
    'new', 
    f.when(df['2col'].isin(['a', 'c']), 'third col').otherwise('col')
).show()
#+----+----+---------+---------+
#| col|2col|third col|      new|
#+----+----+---------+---------+
#|   1|   a|        0|third col|
#|   2|   b|     null|      col|
#|null|   c|        3|third col|
#+----+----+---------+---------+

哎呀,这不是我的意思。Spark 认为我想要字面字符串"col""third col"。相反,我应该写的是:

from pyspark.sql.functions import col
df.withColumn(
    'new', 
    when(df['2col'].isin(['a', 'c']), col('third col')).otherwise(col('col'))
).show()
#+----+----+---------+---+
#| col|2col|third col|new|
#+----+----+---------+---+
#|   1|   a|        0|  0|
#|   2|   b|     null|  2|
#|null|   c|        3|  3|
#+----+----+---------+---+

因为是 col()创建列表达式而不检查有两个有趣的副作用。

它可以重复使用,因为它不是 df 特定的

它可以在分配 df 之前使用

age = col('dob') / 365
if_expr = when(age < 18, 'underage').otherwise('adult')
df1 = df.read.csv(path).withColumn('age_category', if_expr)
df2 = df.read.parquet(path)\
    .select('*', age.alias('age'), if_expr.alias('age_category'))
agegeneratesColumn<b'(dob / 365)'>
if_exprgeneratesColumn<b'CASE WHEN ((dob / 365) <18) THEN underage ELSE adult END'>

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(93)
如何把网页保存为word:将Word文档保存为带有“无标记”的PDF
上一篇
弹丸论破v3隐藏cg:GoogleMapsAPIv3隐藏“滑雪道”
下一篇

相关推荐

  • comeandgetyourlove音乐爱就在你身边

    Come and Get Your Love是一首热门的歌曲,由美国摇滚乐队Redbone演唱。这首歌曲于1974年发行,被收录在他们的专辑《Wovoka》中。歌曲以放克曲风为主,旋律活泼,曲调悠扬,歌词朗朗上口,深受歌迷喜爱。…

    2023-06-29 07:47:31
    0 83 81
  • css预编译器: center;}

    CSS预编译器是一种用于构建CSS的工具,它可以将CSS代码转换为更易于管理和维护的格式。它们可以使CSS代码更加灵活,更易于重用,并且可以帮助开发人员更轻松地组织和管理CSS代码。…

    2023-04-30 05:19:08
    0 60 95
  • python中predict函数参数:如何使用Python的predict函数进行机器学习预测

    示例示例predict函数是scikit-learn中的一个函数,用于预测新样本的输出结果。参数:…

    2023-03-30 08:03:12
    0 25 39
  • canvas 官网Bring Your Ideas to Life with Creative Artwork

    Canvas 官网是一个用于创建图形的 HTML5 API,它可以在浏览器中使用 JavaScript 来绘制 2D 图形。它提供了一个可以在网页上绘制图形的强大工具,可以用来创建动画、游戏、数据可视化等。…

    2023-02-28 09:52:08
    0 48 76
  • qt creator快速入门 第3版 pdf从零开始

    Qt Creator快速入门第3版是一本关于Qt Creator的教程书,旨在帮助读者快速掌握Qt Creator的使用。书中介绍了Qt Creator的基本功能,如如何创建项目、编辑代码、调试代码以及创建应用程序等等。书中还提供了一些实例代码,帮助读者更好地理解Qt Creator的用法。…

    2023-05-16 03:03:33
    0 90 16
  • cherry键盘win键不能用:解决Cherry键盘Win键无法使用的措施

    如果您的cherry键盘win键不能用,可能是由于系统设置问题导致的。下面提供一些代码,可以帮助您解决这个问题:打开“控制面板”,然后点击“硬件和声音”,打开“键盘”选项卡。…

    2023-08-27 03:36:33
    0 17 14
  • certificate意思一步一步指南

    示例示例是一种用于证明某个人或机构拥有某种资格或资质的文件。它可以是一种认证,也可以是一种奖励或认可。代码示例:…

    2023-09-14 15:01:58
    0 17 61
  • win10系统ctrl加c不能复制:解决win10系统下Ctrl+C不能复制的问题

    解决方案解决方案答:可能是由于系统快捷键被修改所导致的,可以尝试恢复系统默认快捷键;…

    2023-04-15 00:45:32
    0 75 57

发表评论

登录 后才能评论

评论列表(48条)