python - 是否可以在 pyspark 中转换数据帧的多列?

标签 python apache-spark pyspark apache-spark-sql

我有一个多列 pyspark 数据框,我需要将字符串类型转换为正确的类型,例如:
我目前正在这样做

df = df.withColumn(col_name, col(col_name).cast('float') \
.withColumn(col_id, col(col_id).cast('int') \
.withColumn(col_city, col(col_city).cast('string') \
.withColumn(col_date, col(col_date).cast('date') \
.withColumn(col_code, col(col_code).cast('bigint')
是否可以创建一个包含类型的列表并将其一次传递给所有列?

最佳答案

您只需要将一些映射作为字典或类似的东西,然后生成正确的 select语句(您可以使用 withColumn ,但通常它会导致性能问题)。像这样的东西:

import pyspark.sql.functions as F
mapping = {'col1':'float', ....}
df = .... # your input data
rest_cols = [F.col(cl) for cl in df.columns if cl not in mapping]
conv_cols = [F.col(cl_name).cast(cl_type).alias(cl_name) 
   for cl_name, cl_type in mapping.items())
   if cl_name in df.columns]
conv_df.select(*rest_cols, *conv_cols)

关于python - 是否可以在 pyspark 中转换数据帧的多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68322664/

相关文章:

json - 使用 pyspark 将 json 文件读入 RDD(不是 dataFrame)

python - 无需在 Python 中导入即可查找模块的路径

python - 凯拉斯 model.to_json() 错误 : 'rawunicodeescape' codec can't decode bytes in position 94-98: truncated\uXXXX

Python - 无法终止进程

python - Spark 中的无序集或类似集?

apache-spark - Spark中用scala计算总体百分比

Python Pandas 计算特定值的出现次数

maven - 如何在 Maven pom 文件中获取 Spark/Kafka org.apache.spark :spark-sql-kafka-0-10_2. 11 :2. 1.0 依赖关系?

python - Pyspark count() 和 collect() 不起作用

apache-spark - 在 PySpark 中重命名重复的列名称或对其执行选择操作