我正在开展一个项目。该应用程序节省了一天的时间。
应用程序在运行时每小时创建一个日志文件,例如
public static void main(String[] args) throws Exception {
String fileName = args[0];
System.out.println("----->Filename : "+fileName);
Long now = new Date().getTime();
SparkConf conf = new SparkConf(true)
.setMaster("local")
.setAppName("JavaSparkSQL_" +now)
.set("spark.executor.memory", "1g")
.set("spark.cassandra.connection.host", "192.168.1.65")
.set("spark.cassandra.connection.native.port", "9042")
.set("spark.cassandra.connection.rpc.port", "9160");
JavaSparkContext ctx = new JavaSparkContext(conf);
JavaRDD<String> input = ctx.textFile("hdfs://abc.xyz.net:9000/dataLoad/resources/" + fileName,6);
JavaRDD<DataInput> result = input.mapPartitions(new ParseJson()).filter(new FilterLogic());
System.out.print("Count --> "+result.count());
System.out.println(StringUtils.join(result.collect(), ","));
javaFunctions(result).writerBuilder("ks","pt_DataInput",mapToRow(DataInput.class)).saveToCassandra();
}
这里20150422是日期,06是记录的小时。
冬天的时间变化,有两个时间凌晨2点 - 你知道我的意思。
我想通过分配后缀来为这两个不同的小时制作两个不同的文件,例如:
2015042206_someName.log
我想到的一个解决方案:
以某种方式(我不知道如何)从日历中获得'上一个小时'并看到'HOUR_OF_DAY'和'PREVIOUS HOUR'之间的差异。如果差异为零,则时间已更改,因此请添加后缀。
在这种情况下,我不知道如何获得前一个小时 - 特别是如果应用程序在前一个小时内没有运行。
任何人都能想到的任何其他解决方案???
非常感谢任何帮助。提前致谢。
答案 0 :(得分:2)
您可以简单地检查一下,看看具有该名称的文件是否已存在。万一它,你可以添加&#34; A&#34;或&#34; B&#34;按照你的意愿。
答案 1 :(得分:1)
恕我直言,你太过复杂了。解决此问题的最佳方法是通过制作时间戳UTC来避免夏令时问题。这样你就永远不会遇到DST问题,而且你不必进行复杂且容易出错的更改。
是的,如果阅读文件名的人没有意识到它不在当地时间,那么可能会让人感到困惑,但你总是可以附加&#34; UTC&#34;在文件名中,如果它确实是一个问题,例如:
2015042202_UTC_someName.log
答案 2 :(得分:0)
最简单的方法是使用SimpleDateFormat("yyyyMMddhhX")