PySpark中DateTime列转Date后GroupBy报错:无法识别MyDate的解决方法
PySpark分组时无法识别新列的问题解决
错误原因
PySpark的DataFrame是不可变对象,所有像filter、withColumn这类转换操作,都会返回一个新的DataFrame,不会修改原对象。你的代码里没有把这些操作的结果重新赋值给变量,导致原df始终是从myTable查询出来的初始状态——根本没生成MyDate列,自然在groupBy时会提示找不到该列。另外你的withColumn语句末尾还少了一个右括号,这也是语法层面的问题。
修正后的代码
分步赋值写法
from pyspark.sql.functions import col # 从表中查询数据 df = spark.sql("SELECT * FROM `myTable`") # 过滤数据,将结果重新赋值给df df = df.filter(df.something != "thing") # 添加日期格式的新列,补全右括号并赋值 df = df.withColumn('MyDate', col('Timestamp').cast('date')) # 按日期分组统计数量 df.groupBy('MyDate').count().show()
链式调用写法(更简洁)
from pyspark.sql.functions import col spark.sql("SELECT * FROM `myTable`") \ .filter(col("something") != "thing") \ .withColumn('MyDate', col('Timestamp').cast('date')) \ .groupBy('MyDate').count() \ .show()
内容的提问来源于stack exchange,提问作者n179911a
相关产品推荐
相关产品推荐

