【发布时间】:2019-04-05 11:30:54
【问题描述】:
有如下两个数据框
first_df
|-- company_id: string (nullable = true)
|-- max_dd: date (nullable = true)
|-- min_dd: date (nullable = true)
|-- mean: double (nullable = true)
|-- count: long (nullable = false)
second_df
|-- company_id: string (nullable = true)
|-- max_dd: date (nullable = true)
|-- mean: double (nullable = true)
|-- count: long (nullable = false)
我在 second_df 中有一些公司数据。我需要从 second_df 中获取 first_df 中列出的那些公司 ID 的数据。
什么样的 spark api 对我有用? 我该怎么做?
谢谢。
问题扩展:
如果没有存储记录,则 first_df 将为空。因此 first_df("mean") & first_df("count") 将为空,导致 "acc_new_mean" 为空。在那种情况下,我需要将 "new_mean" 设置为 second_df("mean") ,该怎么做? 我试过这样但它不工作 任何线索如何在这里处理 .withColumn("new_mean", ... ) ???
val acc_new_mean = (second_df("mean") + first_df("mean")) / (second_df("count") + first_df("count"))
val acc_new_count = second_df("count") + first_df("count")
val new_df = second_df.join(first_df.withColumnRenamed("company_id", "right_company_id").as("a"),
( $"a.right_company_id" === second_df("company_id") && ( second_df("min_dd") > $"a.max_dd" ) )
, "leftOuter")
.withColumn("new_mean", if(acc_new_mean == null) lit(second_df("mean")) else acc_new_mean )
【问题讨论】:
-
@summerbulb 有什么帮助/建议吗?
-
@dytyniak 有什么帮助/建议吗?
-
@jezrael 有什么帮助/建议吗?
-
你能添加一些例子吗?看起来两个数据框都是相同的,这取决于你想要什么数据。您可以将这两个数据框加入或组合到联合中。
-
请提供数据示例以及您尝试过的内容。
标签: scala apache-spark apache-spark-sql databricks