pyspark-如果条件不满足,则不执行任何操作

rqenqsqc  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(333)

我有一个when/others声明如下: df_3 = df_2.withColumn('date', when(size('date') == 1, col('date')[0]).otherwise(col('date'))).withColumn('price', when(size('price') == 1, col('price')[0]).otherwise(col('price'))) 这给了我一个错误 data type mismatch: THEN and ELSE expressions should all be same type .
我有一个 date 列和 price 列,两者都包含数组。如果数组中只有一个元素,我只想将其作为字符串,否则(如果有多个元素)保持原样。所以我的 when 以及 otherwise 不会匹配类型--一个是字符串,另一个是数组。
有办法解决这个问题吗?
输入:

+-------------+-----------+
|         date|      price|
+-------------+-----------+
|           []|         []|
|[25-Mar-2020]|   [95, 95]|
|           []|         []|
|           []|         []|
|           []|         []|
+-------------+-----------+

输出(去掉空数组也会有帮助,但没什么大不了的):

+-------------+-----------+
|         date|      price|
+-------------+-----------+
|           []|         []|
|  25-Mar-2020|   [95, 95]|
|           []|         []|
|           []|         []|
|           []|         []|
+-------------+-----------+
7cjasjjr

7cjasjjr1#

你不能“混合”列中的类型。pysparkDataframe中的每一列都定义了其模式。您要做的是在架构上有arraytype的列上输入整数和数组类型。我的建议是尝试将值转换为字符串:

df_3 = (
   df_2
     .withColumn('date', 
            when(size('date') == 1, col('date')[0])
           .otherwise(concat_ws(",", col('date'))))
)

相关问题