pyspark 如何转换“datetime”列

ltqd579y  于 2022-12-17  发布在  Spark
关注(0)|答案(1)|浏览(160)

在我的PySpark数据框中,我有一个日期时间格式的列“TimeStamp”。我想将其转换为“Date”格式,然后在“GroupBy”中使用。

df = spark.sql("SELECT * FROM `myTable`")
df.filter((df.somthing!="thing"))
df.withColumn('MyDate', col('Timestamp').cast('date')
df.groupBy('MyDate').count().show()

但我得到这个错误:

cannot resolve 'MyDate' given input columns:

你能帮我一下吗?

6rqinv9w

6rqinv9w1#

每次你做df.你正在创建一个新的 Dataframe 。df仅仅在你的第一行代码中被初始化,因此 Dataframe 对象没有新的列MyDate。你可以查看每个对象的id()来查看

df = spark.sql("SELECT * FROM `myTable`")
print(id(df))
print(id(df.filter(df.somthing!="thing")))

这是链接操作的正确语法

df = spark.sql("SELECT * FROM myTable")
df = (df 
    .filter(df.somthing != "thing")
    .withColumn('MyDate', col('Timestamp').cast('date'))
    .groupBy('MyDate').count()
)

df.show(truncate=False)

更新:这是一种更好的编写方式

df = (
    spark.sql(
    """
        SELECT * 
        FROM myTable
    """)
    .filter(col("something") != "thing")
    .withColumn("MyDate", col("Timestamp").cast("date"))
    .groupBy("MyDate").count()
)

相关问题