我有一个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]|
| []| []|
| []| []|
| []| []|
+-------------+-----------+
1条答案
按热度按时间7cjasjjr1#
你不能“混合”列中的类型。pysparkDataframe中的每一列都定义了其模式。您要做的是在架构上有arraytype的列上输入整数和数组类型。我的建议是尝试将值转换为字符串: