首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用java更新星火数据集中列的值?

如何使用java更新星火数据集中列的值?
EN

Stack Overflow用户
提问于 2022-11-24 11:22:36
回答 1查看 28关注 0票数 2

我已经通过以下方法加载了一个数据集:

代码语言:javascript
运行
复制
Dataset<Row> rows = sparkSession.read().format("com.databricks.spark.csv").option("header", "true").load(tablenameAndLocationMap.get(tablename));

数据正在正确加载,但我希望在运行时更新列值。我试过像上面提到的那样使用循环,但没有起作用。

代码语言:javascript
运行
复制
Column data = rows.col("UPLOADED_ON");
Dataset<Row> d = rows.select(data);
            
d.foreach(obj->{
    String date = obj.getAs(0);
    DateFormat inputFo  formatter = new SimpleDateFormat("yyyy-MM-dd");
    Date da = (Date)inputFormatter.parse(date);
    
    DateFormat outputFormatter = new SimpleDateFormat("dd-MM-yy");
    date = outputFormatter.format(da);
});

在这里,我希望用新的值UPLOADED_ON替换/更新列date的现有值。

如果有人能帮上忙,该怎么做。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-11-24 14:37:45

您可以创建另一个具有不同值的列,并删除前一个列。

代码语言:javascript
运行
复制
// create a new column
yourdataset = yourdataset.withColumn("UPLOADED_ON_NEW", lit("Any-value"));
// drop a column 
yourdataset = yourdataset.column("UPLOADED_ON");

在您的例子中,我建议您创建一个接收日期的UDF函数,并根据需要以特定格式返回它。

示例将函数创建到sparkSession中,用于所有数据集转换。

代码语言:javascript
运行
复制
context.sparkSession().udf().register(
   "formatDateYYYYMMDDtoDDMMYY", // name of function
   (String dateIn) -> { ... }, // all convert rules
   DataTypes.StringType // return type
);

使用创建的函数

代码语言:javascript
运行
复制
yourdataset = 
yourdataset.withColumn(
  "UPLOADED_ON_NEW", 
  callUDF(
     "formatDateYYYYMMDDtoDDMMYY", // same name of create function
     col("UPLOADED_ON")
  )
);

在sqlContext中也可以使用UDF函数

代码语言:javascript
运行
复制
yourdataset.createOrReplaceTempView("MY_DATASET");

yourdataset = 
sparkSession.sqlContext().sql("select * , formatDateYYYYMMDDtoDDMMYY(UPLOADED_ON) as UPLOADED_ON_NEW  from MY_DATASET");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74559962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档