【问题标题】:Change column value in a dataframe spark scala更改数据框 spark scala 中的列值
【发布时间】:2017-05-18 08:00:35
【问题描述】:

这就是我的数据框目前的样子

+------------+
|    DATE    |
+------------+
|    19931001|
|    19930404|
|    19930603|
|    19930805|
+------------+

我正在尝试将此字符串值重新格式化为 yyyy-mm-dd hh:mm:ss.fff 并将其保留为字符串而不是日期类型或时间戳。

我将如何使用 withColumn 方法做到这一点?

【问题讨论】:

    标签: scala apache-spark-sql spark-dataframe


    【解决方案1】:

    这是使用UDFwithcolumn 的解决方案,我假设您在Dataframe 中有一个字符串日期字段

    //Create dfList dataframe
      val dfList = spark.sparkContext
        .parallelize(Seq("19931001","19930404", "19930603", "19930805")).toDF("DATE")
    
    
      dfList.withColumn("DATE", dateToTimeStamp($"DATE")).show()
    
      val dateToTimeStamp = udf((date: String) => {
        val stringDate = date.substring(0,4)+"/"+date.substring(4,6)+"/"+date.substring(6,8)
        val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        format.format(new SimpleDateFormat("yyy/MM/dd").parse(stringDate))
      })
    

    【讨论】:

    • 在函数中改变了一些东西,但它可以工作 val stringDate = date.substring(0,4)+"-"+date.substring(4,6)+"-"+date. substring(6,8) format.format(new SimpleDateFormat("yyyy-MM-dd").parse(stringDate))
    【解决方案2】:
    withClumn("date",
          from_unixtime(unix_timestamp($"date", "yyyyMMdd"), "yyyy-MM-dd hh:mm:ss.fff") as "date")
    

    这应该可以。 另一个通知是mm 给出分钟,MM 给出月份,希望这对你有帮助。

    【讨论】:

      【解决方案3】:

      首先,我创建了这个 DF:

      val df = sc.parallelize(Seq("19931001","19930404","19930603","19930805")).toDF("DATE")
      

      对于日期管理,我们将使用 joda 时间库(不要忘记加入 joda-time.jar 文件)

      import org.joda.time.format.DateTimeFormat
      import org.joda.time.format.DateTimeFormatter 
      
      def func(s:String):String={ 
      val dateFormat = DateTimeFormat.forPattern("yyyymmdd");
      val resultDate = dateFormat.parseDateTime(s);
      return resultDate.toString();
      }
      

      最后,将函数应用到数据框:

      val temp = df.map(l => func(l.get(0).toString()))
      val df2 = temp.toDF("DATE")
      df2.show()
      

      这个答案仍然需要一些工作,我自己是新手,但我认为它正在完成工作!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-23
        • 2020-08-25
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多