Java Spark Dataset-如何通过修改现有列值来创建新列

Java Spark Dataset-如何通过修改现有列值来创建新列,java,scala,apache-spark,apache-spark-sql,apache-spark-dataset,Java,Scala,Apache Spark,Apache Spark Sql,Apache Spark Dataset,我有一个如下的数据集 Dataset<Row> dataset = ... dataset.show() | NAME | DOB | +------+----------+ | John | 19801012 | | Mark | 19760502 | | Mick | 19911208 | 我该怎么做?基本上,我试图找出如何以通用方式操纵现有的列字符串值 我尝试使用dataset.withColumn,但不太明白如何实现这一点 感谢您的帮助。假设DOB是一个字符串,

我有一个如下的数据集

Dataset<Row> dataset = ...
dataset.show()

| NAME | DOB      |
+------+----------+
| John | 19801012 |
| Mark | 19760502 |
| Mick | 19911208 |
我该怎么做?基本上,我试图找出如何以通用方式操纵现有的列字符串值

我尝试使用dataset.withColumn,但不太明白如何实现这一点


感谢您的帮助。

假设DOB是一个字符串,您可以编写一个自定义项

def formatDate(s: String): String {
  // date formatting code
}

val formatDateUdf = udf(formatDate(_: String))

ds.select($"NAME", formatDateUdf($"DOB").as("DOB"))

使用子字符串和concat函数:

df.withColumn("DOB_FORMATED",
  concat(substring($"DOB", 0, 4), lit("-"), substring($"DOB", 5, 2), lit("-"), substring($"DOB", 7, 2)))

将数据加载到dataframedeltaData中,只需使用以下行

deltaData.withColumn("DOB", date_format(to_date($"DOB", "yyyyMMdd"), "yyyy-MM-dd")).show()

那些投了反对票的人,你能解释一下为什么我在java中避免在未来使用:dataset.withColumnDOB,concatsubstringcolDOB,0,4,lit-,substringcolDOB,5,2,lit-,substringcolDOB,7,2
deltaData.withColumn("DOB", date_format(to_date($"DOB", "yyyyMMdd"), "yyyy-MM-dd")).show()