如何在Apache Spark DataFrame上使用Coalesce函数

x33g5p2x  于2021-01-29 发布在 Spark  
字(1.2k)|赞(0)|评价(0)|浏览(1888)

如果你是SQL或数仓研发人员,你就会知道 coalesce 函数的重要性。Coalesce函数是SQL中广泛使用的函数之一。你可以使用coalesce函数来返回非空值。在这篇文章中,我们将通过一个例子来了解如何在Apache Spark DataFrame上使用Coalesce。

Coalesce是Spark SQL中的一个非聚合正则函数。Coalesce在给定的列中给出第一个非空值,如果所有列都是空值,则给出空值。你可以在DataFrame列的值上应用COALESCE函数,也可以编写自己的表达式来测试条件。

下面的例子演示了如何在DataFrame列上使用COALESCE函数并创建新的列。我们使用PySpark来演示Spark coalesce函数。

** DataFrame中使用Coalesce函数**

我们将使用下面的DataFrame来测试Spark SQL COALESCE函数。

testDF = sqlContext.createDataFrame([(1,1), (2,2), (None,3), (4,None)], ["id", "number"])

+----+------+
|  id|number|
+----+------+
|   1|     1|
|   2|     2|
|null|     3|
|   4|  null|
+----+------+

下面的例子是创建一个包含所有非空值的新列。

# create new column with non Null values
tmp = testDF.withColumn('newColumn', coalesce(testDF['id'], testDF['number']))

# Check the content of new df
tmp.show()

+----+------+---------+
|  id|number|newColumn|
+----+------+---------+
|   1|     1|        1|
|   2|     2|        2|
|null|     3|        3|
|   4|  null|        4|
+----+------+---------+

Spark SQL查询中使用COALESCE函数

如果你是在Hive或Spark SQL表或视图上工作,你可以在Spark SQL查询中使用coalesce函数。

例如,考虑下面的例子,它在查询中使用了coalesce。请注意,我们已经使用 registerTempTable 方法将 Spark DataFrame 注册为临时表。

sqlContext.sql("select *, coalesce(id, number) as newColumn from temp_table").show()

+----+------+---------+
|  id|number|newColumn|
+----+------+---------+
|   1|     1|        1|
|   2|     2|        2|
|null|     3|        3|
|   4|  null|        4|
+----+------+---------+

相关文章