PySpark如何遍历Dataframe列并更改数据类型?

时间:2020-03-04 21:13:38

标签: python pandas dataframe apache-spark pyspark

在Spark数据框上进行迭代(使用Pyspark)并找到数据类型Decimal(38,10)的最佳方法是什么->将其更改为Bigint(然后全部重新保存到同一数据框)?

我有一部分可以更改数据类型-例如:

df = df.withColumn("COLUMN_X", df["COLUMN_X"].cast(IntegerType()))

但尝试查找并与迭代集成。

谢谢。

2 个答案:

答案 0 :(得分:2)

当类型等于df.dtypes时,您可以遍历bigint并强制转换为decimal(38,10)

from pyspark.sql.funtions import col

select_expr = [
    col(c).cast("bigint") if t == "decimal(38,10)" else col(c) for c, t in df.dtypes
]

df = df.select(*select_expr)

答案 1 :(得分:0)

我发现了这篇帖子https://stackoverflow.com/a/54399474/11268096,您可以在其中遍历所有列并将其转换为所需的数据类型。

from pyspark.sql import functions as F

for col in df.columns:
  df = df.withColumn(
    col,
    F.col(col).cast("double")
  )