如何获取未旋转的列作为Spark中的结果数据框?

时间:2019-06-13 12:40:42

标签: apache-spark apache-spark-sql pivot spark-streaming

我的情况如下:

https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/1165111237342523/1907930805488378/7035720262824085/latest.html

源数据帧具有如下列:

**   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子句。

如何处理这种情况?如果不是,是否有其他方法可以实现这一目标?

0 个答案:

没有答案