我正在解析一个包含数据的 csv 文件
03-10-2016,18:00:00,2,6
Run Code Online (Sandbox Code Playgroud)
当我阅读文件创建模式如下
StructType schema = DataTypes.createStructType(Arrays.asList(
DataTypes.createStructField("Date", DataTypes.DateType, false),
DataTypes.createStructField("Time", DataTypes.TimestampType, false),
DataTypes.createStructField("CO(GT)", DataTypes.IntegerType, false),
DataTypes.createStructField("PT08.S1(CO)", DataTypes.IntegerType, false)))
Dataset<Row> df = spark.read().format("csv").option("Date", "dd-MM-yyyy").schema(schema).load("src/main/resources/AirQualityUCI/sample.csv");
Run Code Online (Sandbox Code Playgroud)
它产生以下错误为
Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Unknown Source)
at org.apache.spark.sql.catalyst.util.DateTimeUtils$.stringToTime(DateTimeUtils.scala:137)
Run Code Online (Sandbox Code Playgroud)
我觉得这是由于日期格式错误。将它们转换成特定格式的方法有哪些?
我有从 2017 年 1 月 1 日到 2017 年 1 月 7 日的数据,这是每周想要的一周汇总数据。我以下列方式使用窗口函数
val df_v_3 = df_v_2.groupBy(window(col("DateTime"), "7 day"))
.agg(sum("Value") as "aggregate_sum")
.select("window.start", "window.end", "aggregate_sum")
Run Code Online (Sandbox Code Playgroud)
我在数据框中有数据作为
DateTime,value
2017-01-01T00:00:00.000+05:30,1.2
2017-01-01T00:15:00.000+05:30,1.30
--
2017-01-07T23:30:00.000+05:30,1.43
2017-01-07T23:45:00.000+05:30,1.4
Run Code Online (Sandbox Code Playgroud)
我得到的输出为:
2016-12-29T05:30:00.000+05:30,2017-01-05T05:30:00.000+05:30,723.87
2017-01-05T05:30:00.000+05:30,2017-01-12T05:30:00.000+05:30,616.74
Run Code Online (Sandbox Code Playgroud)
它显示我的一天是从 2016 年 12 月 29 日开始,但实际数据是从 2017 年 1 月 1 日开始,为什么会出现这种保证金?
我已经看到在导入和存储到HDFS中时使用了不同的文件格式,并且数据处理引擎在执行自己的过程集时也使用了这些格式,因此这些文件格式有何不同,以及如何针对不同的用例进行选择。作为新手会引起混乱,请帮忙。
我已按以下方式格式化数据帧中的时间戳。
var df_v_5 = df_v_4..withColumn("endTimeFormat",
from_unixtime(unix_timestamp('DateTime), "dd-MM-yyyy hh:mm:ss"))
Run Code Online (Sandbox Code Playgroud)
我得到的输出为
DateTime,value1,value2,endTimeFormat
2017-01-01T12:00:00.000+05:30,11,-14,01-01-2017 12:00:00
2017-01-01T13:00:00.000+05:30,110,13,01-01-2017 01:00:00
Run Code Online (Sandbox Code Playgroud)
预期输出:
DateTime,value1,value2,endTimeFormat
2017-01-01T12:00:00.000+05:30,11,-14,01-01-2017 12:00:00
2017-01-01T13:00:00.000+05:30,110,13,01-01-2017 13:00:00
Run Code Online (Sandbox Code Playgroud)
如何将此时间戳转换为 24 小时格式?
我创建了如下数据框:
+----+-------+-------+
| age| number|name |
+----+-------+-------+
| 16| 12|A |
| 16| 13|B |
| 17| 16|E |
| 17| 17|F |
+----+-------+-------+
Run Code Online (Sandbox Code Playgroud)
如何将其转换为以下json:
{
'age' : 16,
'values' : [{‘number’: ‘12’ , ‘name’ : 'A'},{‘number’: ‘12’ , ‘name’ : 'A'} ]
},{
'age' : 17,
'values' : [{‘number’: ‘16’ , ‘name’ : 'E'},{‘number’: ‘17’ , ‘name’ : 'F'} ]
}
Run Code Online (Sandbox Code Playgroud)