在Spark数据框上进行迭代(使用Pyspark)并找到数据类型Decimal(38,10)
的最佳方法是什么->将其更改为Bigint(然后全部重新保存到同一数据框)?
我有一部分可以更改数据类型-例如:
df = df.withColumn("COLUMN_X", df["COLUMN_X"].cast(IntegerType()))
但尝试查找并与迭代集成。
谢谢。
答案 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")
)