【问题标题】:Convert a column to timestamp in spark将列转换为火花中的时间戳
【发布时间】:2021-07-02 15:04:40
【问题描述】:

我有一个字符串列,其值类似于

“2010 年 1 月 23 日星期六 19:23:32 +0000”。

如何在 Spark 中将其转换为时间戳?

下面是代码

package sample.spark.com;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.functions;
import org.apache.spark.sql.functions.*;
import org.apache.spark.sql.expressions.*;
import org.apache.spark.sql.types.DataTypes;

    public class test2 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            SparkSession session = SparkSession.builder().appName("ProspectPerson").master("local[*]").getOrCreate();
            
            session.sparkContext().setLogLevel("ERROR");
            
            List<String> test1 = new ArrayList<>();
            //test1.add("Sat Jan 23 19:23:32 +0000 2010");
            test1.add("Sat Jan 23 19:23:32 +0000 2010");
            //EEE MMM dd HH:mm:ss xxxx yyyy
            Dataset<Row> initialDF = session.createDataset(test1,Encoders.STRING()).toDF();
            initialDF = initialDF.withColumn("test", functions.to_timestamp(initialDF.col("value"),"EE MMM dd HH:mm:ss xxxx yyyy"));
            initialDF.show(false);      
            
        }
    
    }

如果我排除一周中的某一天,即星期六,则模式“MMM dd HH:mm:ss xxxx yyyy”适用于“Jan 23 19:23:32 +0000 2010”。那么问题是如何提供日期时间模式?

【问题讨论】:

标签: java apache-spark apache-spark-sql


【解决方案1】:

日期时间解析器似乎无法解析输入字符串中的星期几。您可以使用 substring 删除该部分(假设它总是有 3 个字母 + 1 个空格):

initialDF = initialDF.withColumn(
    "test", 
    functions.expr("to_timestamp(substring(value, 5), 'MMM dd HH:mm:ss xxxx yyyy')")
);

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2020-12-04
    • 2019-10-30
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多