我正在寻找(一些测试没有成功)在不使用UDF的情况下从case语句返回元组结构类型,有什么方法可以做到这一点吗?
用例是:我们有两列依赖于case表达式中的相同条件,因此我们看到两个选项:
我知道这可以使用UDF来完成,但是我们避免了UDF,因为被火花视为黑盒,因此它们是不可优化的,所以问题是:有没有办法让CASE语句在不使用UDFS的情况下返回多个值?
类似于:
df = df.withColumn("tuple", expr(
"CASE WHEN <condition 1> THEN (value1,value2)
WHEN <condition 2> THEN (value3,value4)
ELSE (value5,value6)
"))
df = df.withColumn("col1",col("tuple")[0])
df = df.withColumn("col2",col("tuple")[1])
可以使用< code>array:
df = df.withColumn(
"tuple",
expr("""
CASE WHEN <condition 1> THEN array(value1,value2)
WHEN <condition 2> THEN array(value3,value4)
ELSE array(value5,value6)
END
""")
)
df = df.withColumn("col1",col("tuple")[0])
df = df.withColumn("col2",col("tuple")[1])
但请注意,数组应该都是相同的类型,即value 1
、value 3
、value 5
应该具有相同的类型,并且value 2
、value 4
、value 6
也应该具有相同的类型。
我在火花数据帧中有一个“结构类型”列,它有一个数组和一个字符串作为子字段。我想修改数组并返回相同类型的新列。我可以用UDF处理它吗?或者有什么替代方案? 似乎我需要行类型的UDF,类似 这是有意义的,因为Spark不知道返回类型的模式。不幸的是,udf.register也失败了:
想象一下下面的代码: 如何定义myUdf的返回类型,以便查看代码的人立即知道它返回了一个Double?
我是scala新手,尝试从元素数组中创建自定义模式,以读取基于新自定义模式的文件。 我正在从json文件中读取数组,并使用爆炸方法为列数组中的每个元素创建了一个数据框。 获得的输出为: 现在,对于上面列出的所有值,我尝试使用下面的代码动态创建val模式 上面的问题是,我能够在struct中获取数据类型,但我也希望仅为数据类型decimal获取(scale和preicion),其限制条件为max a
问题内容: 输入的所有数据类型为: 我必须编写一个UDF(在pyspark中),它返回一个元组数组。我应该给它第二个参数是udf方法的返回类型吗?这将是… 问题答案: Spark中没有这样的东西。产品类型用特定类型的字段表示。例如,如果您想返回一个成对的数组(整数,字符串),则可以使用如下模式: 用法示例:
如何合并数组中的所有结构并生成合并的结构? 例如,使用SparkSQL,我能够读取源json文件并生成数组类型的列,数组中的每个元素都包含一个键:值对。例如,假设我们有一个ArrayType列的值,该列的名称为,值为: 我需要将这个数组类型的列转换为结构类型,其值为{a:1,b:2,c:3}。 由于我是通过读取JSON文件获得模式的,所以我可以使用派生序号获得结果,如: 这个解决方案的问题是,如果
我不断地得到错误 在终端上编译时。 在switch语句的末尾。这是在用终端编译的时候。