【问题标题】:Pyspark compare date with valuePyspark 比较日期和值
【发布时间】:2019-07-21 19:53:16
【问题描述】:

我正在尝试将具有 date 数据类型的 a 列与另一个值进行比较,但出现错误。

d2.printSchema()

root
 |-- family: string (nullable = true)
 |-- entry_date: array (nullable = true)
 |    |-- element: date (containsNull = true)

以下行给出错误

df3 = df2.withColumn("_entry_date", when(df2["entry_date"] ==lit("1979-01-01"), None))

**错误**

“由于数据类型不匹配,无法解析 '(entry_date = '1979-01-01')':'(entry_date = '1979-01-01')' 中的不同类型(数组和字符串) .;;\n'Project [family#1149, entry_date#1164, CASE WHEN (entry_date#1164 = 1979-01-01) THEN null END AS _entry_date#1167]\n+- AnalysisBarrier\n +- 聚合 [family#1149 ], [family#1149, collect_list(CASE WHEN isnull(_date#1154) THEN 1979-01-01 ELSE cast(_date#1154 as string) END, 0, 0) AS entry_date#1164]\n +- 项目 [id #1148, family#1149, date#1150, to_date(from_unixtime(unix_timestamp('date, yyyy-mm-dd, None), yyyy-MM-dd HH:mm:ss, None), None) AS _date#1154] \n +- 逻辑RDD [id#1148, family#1149, date#1150], false\n"

【问题讨论】:

  • 什么是 df2 的架构或如何将 df 转换为 df2? df2.entry_date 是 ArrayType 吗?你的 spark 版本是什么?
  • @jxc 我已经更新了问题
  • 您的预期结果是什么?过滤掉这个数组字段中的一些日期或将值重置为 NaT 时它是 '1979-01-01'?你能添加一些示例数据和预期的结果吗?

标签: pyspark


【解决方案1】:

这对我有用:

df3 = df2.withColumn("_entry_date", when(df2["entry_date.element"] == lit("1979-01-01"), None))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多