文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
select
和 selectExpr
是在 Apache Spark 中用于 DataFrame 操作的函数。
1.select
函数用于选择一个或多个列,并返回一个新的 DataFrame。它接受一个或多个列名作为参数,或者可以使用列表达式来选择列。
示例用法:
df.select("column1", "column2") # 选择列 "column1" 和 "column2"
from pyspark.sql.functions import col
df.select(col("column1"), col("column2")) # 使用 col 函数选择列
df.select(df.column1, (df.column2 + 1).alias("new_column")) # 使用列表达式选择列
2.selectExpr
函数用于选择列,并对列进行表达式计算或重命名。它接受一个或多个列表达式作为参数,并返回一个新的 DataFrame。
示例用法:
df.selectExpr("column1", "column2 + 1 as new_column") # 选择列 "column1" 并计算 "column2 + 1",重命名为 "new_column"
df.selectExpr("column1", "column2 * 2", "column3 > 0 as positive") # 选择列 "column1",计算 "column2 * 2",并将 "column3 > 0" 转换为布尔值列 "positive"
在使用这两个函数时,你可以使用列名、表达式、聚合函数等进行列的选择和计算。还可以使用其他 Spark SQL 函数和操作符来构建更复杂的列表达式。
注意:以上示例中的 df
表示一个 DataFrame 对象,你需要将其替换为你实际使用的 DataFrame 变量名。另外,如果你使用的是 PySpark,可以使用 pyspark.sql.functions
模块中的函数来构建列表达式,如示例中的 col
和 alias
。
pyspark中,可以利用方法替代开窗函数:
使用 pyspark.sql.Window
、pyspark.sql.functions
中的函数以及 DataFrame
的 withColumn
方法来创建一个新的列 new_col
,该列存储了按照 col1
和 col2
分组后,根据 col3
排序的前一行的值。
接下来,使用 withColumn
方法将新的列 new_col
添加到 DataFrame 中。withColumn
方法接受两个参数:新列的名称和要添加的表达式。在这里,我们使用 fn.lag('col3').over(windowSpec)
作为表达式,fn.lag
函数计算了按照窗口规范排序后的前一行的值。
from pyspark.sql import Window
# 按照col1和2分组,然后按照col3排序
windowSpec = Window.partitionBy('col1', 'col2').orderBy('col3')
df = df.withColumn('new_col', fn.lag('col3').over(windowSpec))
其中selectExpr可以代替上面的开窗函数:
dforder = df.selectExpr('col1','col2','col3',
"LAG(co3) OVER (PARTITION BY col1,col2 ORDER BY col3) AS new_col")