[英]Extract only date from timestamp from column in a DataFrame - Spark in Java
我有 cloudera-quickstart-vm-5.13.0 环境。 在这个环境中已经安装了 Hadoop 和 Spark。 我已将一个 csv 文件放入 hdfs。 然后,我编写了此 java 代码来读取 csv 并尝试计算每天有多少条出租车路线(例如,2019 年 10 月 10 日有 29 条出租车路线,2019 年 11 月 10 日有 29 条出租车路线) 16 条出租车路线等......)。 CSV 文件字段是:
●taxi_id
●pickup_datetime
●passengers
●pick_lon
●pick_lat
.我的java代码是:
package com.bigdata.taxi;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
SparkConf conf = new SparkConf();
conf.setAppName("My 1st Spark app");
conf.setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
SparkSession sparkSession = SparkSession.builder().sparkContext(sc.sc()).getOrCreate();
//Now read csv , from hdfs source
//[cloudera@quickstart ~]$ hdfs dfs -put /home/cloudera/Desktop/fares.csv hdfs://quickstart.cloudera:8020//user//cloudera//fares.csv
Dataset<Row> df = sparkSession.read().option("header", true).option("inferSchema", "true").
option("timestampFormat", "yyyy-MM-dd hh:mm:ss").csv("hdfs://quickstart.cloudera:8020//user//cloudera//fares.csv");
df.show(); //only showing top 20 rows
Dataset<Row> df2 = df.orderBy("pickup_datetime").groupBy("pickup_datetime").count();
df2.show();
}
}
但是,我的问题是pickup_datetime 字段不仅包含日期,还包含小时、分钟和秒。 那么,如何通过java从数据框中的pickup_datetime列中删除hh:mm:ss?
谢谢!
您可以添加仅包含日期的新列。 date_format在这里很有帮助。
df = df.withColumn("pickup_date", date_format(col("pickup_datetime"), "yyyy-MM-dd"));
在下面的代码中,只使用pickup_date
列而不是pickup_datetime
。
注意:您需要导入 Spark 函数:
import static org.apache.spark.sql.functions.*;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.