Python Pyspark-将多个列从Str转换为Int
我正在尝试使用PySpark 2.1.0将多个字符串列转换为数据帧中的整数。数据集是要开始的rdd,创建为数据帧时会生成以下错误:Python Pyspark-将多个列从Str转换为Int,python,apache-spark,casting,pyspark,Python,Apache Spark,Casting,Pyspark,我正在尝试使用PySpark 2.1.0将多个字符串列转换为数据帧中的整数。数据集是要开始的rdd,创建为数据帧时会生成以下错误: TypeError: StructType can not accept object 3 in type <class 'int'> 首先,问题是没有基于RDD创建数据帧。 此后,我尝试了两种方法来转换(df2),第一种是注释掉的 有什么建议吗? 或者,我是否可以使用.withColumn函数一次性强制转换所有列,而不是指定每个列? 实际的数据集虽然
TypeError: StructType can not accept object 3 in type <class 'int'>
首先,问题是没有基于RDD创建数据帧。
此后,我尝试了两种方法来转换(df2),第一种是注释掉的
有什么建议吗?
或者,我是否可以使用.withColumn函数一次性强制转换所有列,而不是指定每个列?
实际的数据集虽然不大,但有很多列。问题不在于代码,而在于数据。您正在传递一个列表,该列表将被视为一列,而不是您想要的六列 试试下面的rdd行,它应该可以正常工作。(注意列表周围的额外括号)—— 您使用上面更正的代码行显示以下输出:
+---+---+---+---+---+---+
| A| B| C| D| E| F|
+---+---+---+---+---+---+
| 1| 2| 3| 4| 5| 6|
+---+---+---+---+---+---+
+---+---+
| A| E|
+---+---+
| 1| 5|
+---+---+
您可以
映射到带有铸造列的新RDD
rdd = sc.parallelize([["1", 2, 3, 4, "5", 6]])
+---+---+---+---+---+---+
| A| B| C| D| E| F|
+---+---+---+---+---+---+
| 1| 2| 3| 4| 5| 6|
+---+---+---+---+---+---+
+---+---+
| A| E|
+---+---+
| 1| 5|
+---+---+