在spark中将列转换为时间戳

vs3odd8k  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(449)

我有一个字符串列,其值如下
“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);      

        }

    }

如果我排除了星期几,即sat,那么模式“mmm dd hh:mm:ss x yyy”与“jan 23 19:23:32+0000 2010”配合得很好。所以问题是如何提供datetime模式?

xu3bshqb

xu3bshqb1#

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

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

相关问题