我的情况如下:
源数据帧具有如下列:
** company_id ,item_code, item_value ,business_date, calc_type and create_date **
我需要对每个公司的“ item_code”列上的数据进行透视,即“ company_id”,但是每个“ item_code”都有其关联的“ item_value”。 我需要在结果数据帧中按原样获得其余列。
该怎么办? 任何帮助,非常感谢。
样本数据:
+----------+----------+-------------+--------------------+-------------+----------+-------------+---------+---------------+-----------+
|company_id| data_date|currency_code| item_code|fin_stmt_type|item_value|business_date|calc_type|conversion_rate|create_date|
+----------+----------+-------------+--------------------+-------------+----------+-------------+---------+---------------+-----------+
| 54472|1997-06-30| USD|capital_expenditures| Q| -7.694| null| null| null| 2013-10-19|
| 54472|1997-06-30| USD|cash_flow_extra_i...| Q| null| null| null| null| 2013-10-19|
| 54472|1997-06-30| USD|cash_short_term_i...| Q| 443.925| null| null| null| 2013-10-19|
| 54472|1997-06-30| USD|changes_in_workin...| Q| 0.498| null| null| null| 2013-10-19|
+----------+----------+-------------+--------------------+-------------+----------+-------------+---------+---------------+-----------+
假定上述源数据“ df”。 我想针对每个国家/地区使用“ item_code”。我们可以按照以下步骤
val pivotedDf = df.groupBy("company_id")
.pivot("item_code")
.agg( first( when( col("item_value").isNotNull, col("item_value"))) )
给出的输出为:
+----------+--------------------+--------------------+--------------------+--------------------+
|company_id|capital_expenditures|cash_flow_extra_i...|cash_short_term_i...|changes_in_workin...|
+----------+--------------------+--------------------+--------------------+--------------------+
| 54472| -7.694| null| 443.925| 0.498|
+----------+--------------------+--------------------+--------------------+--------------------+
如上面的输出所示,我没有“ fin_stmt_type”,“ item_value”,“ business_date”,“ calc_type”,“ conversion_rate”,“ create_date”列。
如何将剩余的列也放入我的库中。 请注意,这些列是正常列,没有包含足够有效的数据来执行/包含group by子句。
如何处理这种情况?如果不是,是否有其他方法可以实现这一目标?