在hive實際生成需求中,我們常常會碰到這樣的問題,找出會員未到期的用戶,那么,我們可以通過分別對用戶會員開通時間、結束時間跟當前時間做比較,用戶會員開通時間effdate以及結束時間expdate已確定,如下圖:

在IDEA上怎么樣才能完成上述操作呢
很多時候,我們在碰到問題的時候都會去網上尋找答案,其中,搜索用的關鍵詞尤為重要,關鍵詞用的好,答案一下子就出來了,反之可能要在上面花費很大的功夫,西瓜要完成的任務是在IDEA上用scala語言完成上面的任務,但一開始沒有思路,網上搜索的關鍵詞是SparkDataFrame、Scala之類的,導致一致搜不出來想要的結果,卡了一晚上,今天早上在用Hive表進行測驗的時候忽然發現,上面的資料是從Hive匯入的,西瓜之前搜索用的關鍵詞都錯了,最后用Hive關鍵詞搜索,根據文章提供的資源,思路一下子就出來了,
order_index.filter("cost>0 and offername != 'NULL'") //其他篩選條件
.withColumn("effdate",col("effdate").cast("timestamp")) //將string型別資料轉換為timestamp
.withColumn("expdate",col("expdate").cast("timestamp")) //同上
.withColumn("now_date",from_unixtime(unix_timestamp(),"yyyy-MM-dd HH:mm:ss")) //獲取當前時間,時間格式為"yyyy-MM-dd HH:mm:ss"("2014-01-03 00:00:00")
.withColumn("date1",datediff(col("now_date"),col("effdate"))) //now_date減去effdate,結果為正即想要的結果
.withColumn("date2",datediff(col("expdate"),col("now_date"))) //同上,結果為正說明會員還沒到期
.filter("date1>0 and date2>0") //條件篩選,篩選出開通時間在當前時間之前且結束時間在當前時間之后的資料
.show()
結果如下:

以上就是會員未到期的用戶的資料(部分),西瓜在原本的資料上新增了三列,但西瓜認為此代碼還需要優化,初步猜測可以將代碼優化成不需要新增那三列也可以找出想要的資料,歡迎各位小伙伴提出自己的看法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376993.html
標籤:其他
上一篇:Spark 術語與寬窄依賴
下一篇:hadoop環境搭建(1)
