无法将LongType强制转换为DateType错误

时间:2017-11-30 18:29:01

标签: type-conversion pyspark

(PySpark新手)

我做了很多搜索并尝试了很多不同的方式,我在这里发布了我的最后一次尝试: 我的数据框看起来像:

txn_dt datetime64 [ns] id int64

我正在尝试使用Spark SQL将txn_dt连接到另一个日期类型并获取错误类型错误匹配,因此我尝试使用以下代码将txn_dt转换为日期:

df = df.withColumn("txn_dt_tmp",df["txn_dt"].cast(DateType())) \
                                        .drop("txn_dt") \
                                        .withColumnRenamed("txn_dt_tmp", "txn_dt")

但是

org.apache.spark.sql.AnalysisException: cannot resolve 'CAST(`txn_dt` AS DATE)' due to data type mismatch: cannot cast LongType to DateType;

请帮忙

4 个答案:

答案 0 :(得分:0)

尝试转换' txn_dt'时间戳,然后将其转换为日期数据类型。

答案 1 :(得分:0)

请你试试以下内容:

from pyspark.sql.functions import unix_timestamp

df.withColumn('txn_dt',unix_timestamp(txn_dt_tmp,'yyyy-MM-dd').cast("date"))

答案 2 :(得分:0)

另一种解决方案是使用from_unixtime从原始列中获取timestamp数据类型,然后使用to_date将其转换为DateType

import pyspark.sql.functions as f
df.withColumn("txn_dt", f.to_date(f.from_unixtime(f.col("txn_dt"))))

答案 3 :(得分:0)

Scala 中的另一种解决方案,首先转换为 Timestamp,然后获取 Date

import org.apache.spark.sql.functions.{col, to_date}

df.withColumn("txn_dt", to_date(col("txn_dt").cast(TimestampType)))