場景如下,某個user_id在不用的月份在id1~id_12上都有資料,機器學習訓練時,這些id對應不同月份上的資料要麼在一起進行編碼,最終成為一行資料,要麼把這些id對應不同月份的資料展開,成為新的feature,比如id1在201805上的資料可以作為乙個新的feature–>201805_id1
變成如下的形式(每個id在不同月份的值變成了新id)
user_id
201703.0_id1
201307.0_id1
201306.0_id
and so on …
def gen_expr(feature_array: array[string]): seq[column] =
val basic = spark.read.parquet("***")
val expr1 = gen_expr(basic.columns)
val basic_roll =mibasic.groupby("user_id")
.pivot("month")
.agg(expr1.head,expr1.tail:_*)
.na.fill(-1)
主要使用的是spark dataset的pivot
函式,先groupby("user_id")
,將資料按照user_id
進行分組,然後pivot
我們需要展開的屬性,比如我們要在month上展開,那麼就要pivot("month")
,pivot
後要跟agg
函式,因為pivot
後,對應欄位下會生成一列資料,比如pivot("month")
後,如果原始資料中id1在201805有n條資料,那麼pivot
後,對應的201805_id1
欄位下就會有高度為n的列,在pivot後緊跟的agg
函式就要對這些列進行處理,比如使用sum
,max
,min
等等,在這裡我用first
取第一行,因為原始資料中每個month下每個id只有一行資料。另外要說明的是,pivot後產生新字段的命名規則是:pivot
欄位名_原始id名,比如**中的201805.0_id1
Spark DataFrame中的join型別
spark dataframe中join與sql很像,都有inner join,left join,right join,full join 那麼join方法如何實現不同的join型別呢?看其原型 def join right dataframe,usingcolumns seq string jo...
spark dataframe筆記(鏈結彙總)
spark dataframe筆記 dataframe行轉列 spark dataframe筆記 對dataframe一列值保留4位小數 spark dataframe筆記 按照dataframe某一列的數值排序,並增加一列索引 2 降序排 spark dataframe筆記 按照dataframe...
Spark DataFrame關於資料常用操作
sql語法 1.檢視全表資料 dataframe.show 2.檢視部分字段資料 有4種方法 1 dataframe.select 欄位名稱 show 2 dataframe.select 欄位名稱 show 推薦 3 dataframe.select col 欄位名稱 show 4 datafra...