1.時間戳(毫秒)轉時間
var time2 = 1541827261631d; var result2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2) println(result2)
普通顯示的
//long timeStamp = 1495777335060;//直接是時間戳 long timeStamp = System.currentTimeMillis(); //獲取當前時間戳,也可以是你自已給的一個隨機的或是別人給你的時間戳(一定是long型的數據) SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//這個是你要轉成后的時間的格式 String sd = sdf.format(new Date(timeStamp)); // 時間戳轉換成時間 System.out.println(sd);//打印出你要的時間
2.保留小數點后12位數字
// 數據格式 經緯度小數度只保存12個。如果后面有0舍棄 def dataformat(nn: Int) : String ={ var df2 = new DecimalFormat("###.000000000000");//定義格式 return df2.format((nn.toDouble/60000).toFloat) //將值再轉位float這個的好處是,例如:原來的:3.4567000000,轉為3.4567 }
3.2進制轉10進制
//2進制轉10進制 @Test public void tt(){ int m=Integer.parseInt("1001",2); System.out.println(m); }
4.16進制轉2進制
// 16進制轉2進制 @Test public void function1( ) { int n = Integer.parseInt("3", 16); String result = Integer.toBinaryString(n); //預先定義一個8位0 StringBuilder zero =new StringBuilder("00000000"); String result3 = zero.substring(0, zero.length() - result.length()) + result; // int r = Integer.parseInt(result); // System.out.println(r); System.out.println(result3); }
5.進制轉換
@Test public void test07() { int i = Integer.parseInt("3", 16); // 16代表前的的是十六進制數值 7-8位 String s = Integer.toHexString(i); // 需要時再轉回字符串形式 String s3 = Integer.toHexString(100000); // 需要時再轉回字符串形式 System.out.println(i + "--i");// true System.out.println(s3 + ":s3---");// true 3e7--->999 64---100 System.out.println(s + "+++s");// trues }
6.正則匹配
// 正則表達式匹配 // 參考 :https://zhidao.baidu.com/question/552412036.html // 參考 :https://www.cnblogs.com/sparkbj/articles/6207103.html @Test public void test06() { // [0-9]{1,3} 以數字長度為1到3位 。以a字符開頭以b字符結尾 Pattern p = Pattern.compile("a[0-9]{1,3}b"); Matcher m = p.matcher("a724b"); boolean b = m.matches(); System.out.println(b);// true }
7.截取特殊符號前后字符串
//java版:獲取特殊符號后面的字符串 String str ="abc.rar"; String [] strs = str.split("[.]"); System.out.println("符號前面的字符串="+strs[0]); System.out.println("符號后面的字符串="+strs[1]); //scala版 var str ="abc.rar"; var strs = str.split("[.]"); println("符號前面的字符串="+strs.apply(0)) println("符號后面的字符串="+strs.apply(1)) //scala版推薦使用 val a = "aa-bc-xx" val i = a.indexOf("-") val x = a.indexOf("-", i) val one = a.substring(0, i) print(one) //aa val two = a.substring(i + 1, x) print(two) //bc val three = a.substring(x + 1) print(three)//xx
8.時間格式化
//scala版 var time2 = "2018-11-13 15:49:4" var date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time2); println(date) var now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); println(now) //java版 先用parse將字符串解析成date型,再用format格式化成string。 Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2005-06-09"); String now = new SimpleDateFormat("yyyy年MM月dd日").format(date);
綜合,下面有可能會重復,但實現方式是不一樣的
//16 轉 10 def SixteenTurnTen (SixteenString:String): String ={ var str = new BigInteger(SixteenString,16).toString(10) str }
//16 轉 2 單參數
def SixteenTurnTwo (SixteenString:String): String ={
var str = new BigInteger(SixteenString,16).toString(2)
var a = str.length;
while (a < 8){
str = "0"+str
a += 1
}
str
}
//16 轉 2 def SixteenTurnTwo (SixteenString:String,lengthStr:Int): String ={ var str = new BigInteger(SixteenString,16).toString(2) var a = str.length; while (a < lengthStr){ str = "0"+str a += 1 } str } //2 轉 10 def TwoTurnTen (SixteenString:String): String ={ var str = new BigInteger(SixteenString,2).toString(10) str } //經緯度計算並且四舍五入 def Rounding(SixteenDouble:Double):String = { var formatDouble = NumberFormat.getNumberInstance() formatDouble.setMaximumFractionDigits(12) formatDouble.setRoundingMode(RoundingMode.UP) formatDouble.format(SixteenDouble/60000) } //時間戳轉化為時間 def tranTimeToString(tm:String) :String={ val fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") val tim = fm.format(new Date(tm.toLong)) tim } //補齊0 def Complement(str:String,length:Int): String = { var stringValue = str var value = str.length if (value < length){ while (value < length){ stringValue = "0" + str value = length } } stringValue }
9.一個程序同時消費多個kafkak里的數據
import org.apache.spark.streaming.kafka010.ConsumerStrategies
//下面是spark streaming消費多個主題 val topic = Array("k1", "k2","k3") //接收數據 var stream: InputDStream[ConsumerRecord[String, String]] = KafkaUtils.createDirectStream[String, String]( ssc, PreferConsistent, ConsumerStrategies.Subscribe[String, String](topic, kafkaParams) // --- ) var events: DStream[String] = stream.map(r => r.value()+"_"+r.topic()) //下面是spark structed streaming消費多個主題 val kafkaKvPair = spark .read .format("kafka") .option("kafka.bootstrap.servers", "host1:port1,host2:port2") .option("subscribe", "topic1") .load() .selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)") .as[(String, String)] 多個topic就逗號分割一下即可,比如 .option("subscribe", "topic1,topic2,topic3"
10.兩個map合並為一個map且根據主鍵合並
def main(args: Array[String]): Unit = { var A:Map[String,String] = Map() A+=("101"->"a1") A+=("102"->"a2") A+=("103"->"a3") A+=("104"->"a4") A+=("105"->"a5") A+=("106"->"a6") var B:Map[String,String] = Map() B+=("101"->"b1") B+=("102"->"b2") B+=("103"->"b3") B+=("104"->"b4") B+=("105"->"b5") A.foreach(a=>{ var ak= a._1 B.foreach(b=>{ var bk=b._1 if (ak==bk){ var vaule=A.get(ak.toString()).getOrElse(Tuple1[String]("")).toString+","+B.get(bk.toString()).getOrElse(Tuple1[String]("a")).toString A+=(ak.toString()->vaule) } }) }) println(A) }
//Map(104 -> a4,b4, 103 -> a3,b3, 106 -> a6, 102 -> a2,b2, 101 -> a1,b1, 105 -> a5,b5)
11.兩個表廣播(只是借鑒)
val sql = "SELECT * FROM " + FunctionEntity.getString("oracle.tableName") var mapValue: Map[String, String] = OracleConnect.getData(sql) var oracleValue: Broadcast[Map[String, String]] = ssc.sparkContext.broadcast(mapValue) val sqlTwo = "SELECT * FROM " + FunctionEntity.getString("oracle.tableNameTwo") var mapValueTwo: Map[String, String] = OracleConnect.getDataTwo(sqlTwo) var oracleValueTwo: Broadcast[Map[String, String]] = ssc.sparkContext.broadcast(mapValueTwo) var value: Map[String, String] = RepairEditionNine.analysisString(dataLineValue, 1) var fianlMap: Map[String, String] = OracleConnect.getRelationData(value, oracleValue.value) var fianlMapTwo: Map[String, String] = OracleConnect.getRelationDataTwo(fianlMap, oracleValueTwo.value) var put: Put = HbaseConnect.WriteHbase(fianlMapTwo)
12.這個是別人寫的時間處理。寫的比較多,可以使用:https://blog.csdn.net/springlustre/article/details/47273353
13.比較復雜的時間獲取,例如今天周6,周7等:https://blog.csdn.net/qq_16038125/article/details/72834270
import java.text.SimpleDateFormat import java.util.{Calendar, Date} object T03 { def main(args: Array[String]): Unit = { //2018/12/13 13:50:16 println(dayOfWeek("2018-12-23")) println(getNowTime()) } //獲取昨天日期 def getNowTime():String={ var dateFormat:SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd") var cal:Calendar=Calendar.getInstance() cal.add(Calendar.DATE,-1) var yesterday=dateFormat.format(cal.getTime()) yesterday } //獲取本周一的日期 def getNowWeekStart():String={ var period:String="" var cal:Calendar =Calendar.getInstance(); var df:SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) //獲取本周一的日期 period=df.format(cal.getTime()) period } //星期天數 def dayOfWeek(dateStr: String): Int = { val sdf = new SimpleDateFormat("yyyy-MM-dd") val date = sdf.parse(dateStr) val cal = Calendar.getInstance(); cal.setTime(date); var w = cal.get(Calendar.DAY_OF_WEEK)-1 ; //星期天 默認為7 if (w <= 0) w = 7 w } }