练习创建 UDF
有时您的数据需要进行内置函数不支持的转换。这时就适合使用自定义用户定义函数("UDF")。
SQL 函数 udf 可用。
已提供一个 dataframe df2,类型为 DataFrame[doc: array<string>, in: array<string>, out: array<string>]。其 doc 列包含简单的标记。
下面的代码会显示 doc 包含 '1' 的前 20 行:
df2.where(array_contains('doc','1')).show()
您需要完成两个目标:
- 确保转换后的数据由非空向量组成。
- 某个 dataframe 的一列包含字符串数组,且每个数组只有一个元素。您希望将这一列转换为字符串。
本练习是课程的一部分
Python 中的 Spark SQL 入门
练习说明
- 创建一个 udf,只有当值为非空向量时返回 true,可使用
numNonzeros()。 - 创建一个 udf,返回数组的第一个元素,并返回其字符串表示。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Returns true if the value is a nonempty vector
nonempty_udf = udf(lambda x:
True if (x and hasattr(x, "toArray") and x.____())
else False, ____())
# Returns first element of the array as string
s_udf = udf(lambda x: ____(x[0]) if (x and type(x) is list and len(x) > 0)
else '', ____())