将数据框架中的新派生列从布尔值转换为整数

时间:2015-10-26 20:02:14

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

假设我有一个带有此架构的DataFrame x

xSchema = StructType([ \
    StructField("a", DoubleType(), True), \
    StructField("b", DoubleType(), True), \
    StructField("c", DoubleType(), True)])

然后我有了DataFrame:

DataFrame[a :double, b:double, c:double]

我想要一个整数派生列。我能够创建一个布尔列:

x = x.withColumn('y', (x.a-x.b)/x.c > 1)

我的新架构是:

DataFrame[a :double, b:double, c:double, y: boolean]

但是,我希望列y包含0表示False,1表示True表示。

cast功能只能在列上运行而不能在DataFrame上运行,而withColumn功能只能在DataFrame上运行。如何添加新列并同时将其转换为整数?

1 个答案:

答案 0 :(得分:10)

您使用的表达式求值为列,因此您可以像这样直接投射:

x.withColumn('y', ((x.a-x.b) / x.c > 1).cast('integer')) # Or IntegerType()