如何在Spark数据框中将所有列更改为双精度类型

时间:2019-01-28 09:45:15

标签: python apache-spark dataframe pyspark

我正在尝试将spark数据帧的所有列更改为double类型,但我想知道是否有比仅循环遍历和强制转换更好的方法。

2 个答案:

答案 0 :(得分:2)

使用此数据框:

df = spark.createDataFrame(
  [
    (1,2),
    (2,3),
  ],
  ["foo","bar"]
)

df.show()
+---+---+
|foo|bar|
+---+---+
|  1|  2|
|  2|  3|
+---+---+

for循环很可能是最简单,更自然的解决方案。

from pyspark.sql import functions as F

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

df.show()
+---+---+
|foo|bar|
+---+---+
|1.0|2.0|
|2.0|3.0|
+---+---+

当然,您也可以使用python理解:

df.select(
  *(
    F.col(col).cast("double").alias(col)
    for col
    in df.columns
  )
).show()

+---+---+
|foo|bar|
+---+---+
|1.0|2.0|
|2.0|3.0|
+---+---+

如果您有很多列,则第二个解决方案要好一些。

答案 1 :(得分:0)

首先不要在 Spark 问题上发布来自 PySpark 的解决方案。对于初学者来说,我觉得这很烦人。并非每个实现都可以顺利转换为 Spark。

假设 df 如果 DataFrame

import org.apache.spark.sql.Column

def func(column: Column) = column.cast(DoubleType)

val df2=df.select(df.columns.map(c=>func(col(c))): _*)