转换为pyspark dataframe的列字符串会引发错误

时间:2019-05-17 09:35:30

标签: pyspark

我有pyspark数据框,其中两列的数据类型为

[('area','int'),('customer_play_id','int')]

+----+----------------+
|area|customer_play_id|
+----+----------------+
| 100|        8606738 |
| 110|        8601843 |
| 130|        8602984 |
+----+----------------+

我想使用pyspark命令将列区域强制转换为str,但是出现以下错误

我在下面尝试过

  1. str(df ['area']):但是它没有将数据类型更改为str
  2. df.area.astype(str):给出了“ TypeError:意外类型:”
  3. df ['area']。cast(str)与上面的错误相同

任何帮助将不胜感激 我想使用pyspark dataframe操作将区域的数据类型作为字符串

3 个答案:

答案 0 :(得分:1)

您可以执行以下任何一项操作-

选项1:

df1 = df.select('*',df.area.cast("string"))

select-在df1中想要的所有列都应在select中提及

选项2:

df1 = df.selectExpr("*","cast(area as string) AS new_area")

selectExpr-在df1中需要的所有列均应在selectExpr中提及

选项3:

df1 = df.withColumn("new_area", df.area.cast("string"))

withColumn将添加新列(除df的现有列之外)

selectselectExpr中的

“ *”代表所有列。

答案 1 :(得分:1)

使用withColumn函数来更改spark中字段中的数据类型或值,例如显示如下:

import pyspark.sql.functions as F
df = df.withColumn("area",F.col("area").cast("string"))

答案 2 :(得分:1)

您可以使用此UDF函数

from pyspark.sql.types import FloatType
tofloatfunc = udf(lambda x: x,FloatType())
changedTypedf = df.withColumn("Column_name", df["Column_name"].cast(FloatType()))