You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark 3.1字符串转日期数组判断incoming_date存在性报错如何解决

Spark 3.1 Java 判断日期列是否在指定日期列表中的解决方案

错误原因分析

  • 方法1报错原因:LocalDate.parse返回的是java.time.LocalDate类型,和你声明的java.util.Date数组类型不兼容,触发数组存储异常。
  • 方法2报错原因:
    1. SimpleDateFormat的模式字符串错误:YYYY代表周年、DD代表年积日,正确的日期格式应该是yyyy-MM-dd;
    2. array_contains函数参数顺序颠倒:该函数第一个参数是待查询的数组,第二个参数是要匹配的元素;
    3. Spark SQL不支持直接传入Java原生的java.util.Date数组作为函数参数,需要转成Spark可识别的日期字面量数组。

正确实现代码

方式1:直接构造Spark日期字面量数组(推荐,无需额外Java日期转换)

import org.apache.spark.sql.functions;
import static org.apache.spark.sql.functions.lit;
import static org.apache.spark.sql.functions.array_contains;
import java.util.Arrays;
import java.util.stream.Collectors;

// 原日期字符串
String Dates = "2021-07-06,1889-03-30";

// 拆分字符串后转成Spark Date类型的字面量数组
org.apache.spark.sql.Column dateArray = functions.array(
    Arrays.stream(Dates.split(","))
        .map(dateStr -> functions.to_date(lit(dateStr)))
        .collect(Collectors.toList())
        .toArray(new org.apache.spark.sql.Column[0])
);

// 新增result列
dataset = dataset.withColumn("result", array_contains(dateArray, col("incoming_date")));

方式2:先转Java LocalDate再传入

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.stream.Collectors;
import static org.apache.spark.sql.functions.lit;
import static org.apache.spark.sql.functions.array_contains;
import static org.apache.spark.sql.functions.array;

String Dates = "2021-07-06,1889-03-30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

org.apache.spark.sql.Column dateArray = array(
    Arrays.stream(Dates.split(","))
        .map(dateStr -> LocalDate.parse(dateStr, formatter))
        .map(localDate -> lit(localDate))
        .collect(Collectors.toList())
        .toArray(new org.apache.spark.sql.Column[0])
);

dataset = dataset.withColumn("result", array_contains(dateArray, col("incoming_date")));

执行后即可得到预期的result列,匹配到指定日期返回true,未匹配返回false。

内容的提问来源于stack exchange,提问作者Sweety

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 14:24:02