如何将 SparkR 数据框中的整数列转换为字符串?

How do I convert a integer column in a SparkR data frame to a string?

我有一个 SparkR 数据框,其中所有列都是整数。我想用字符串替换一列。

因此,如果该列包含 0、1、1、0,我想将其设为 "no"、"yes"、"yes"、"no"。

我试过了

df$C0 <- ifelse(df$C0 == 0, "no", "yes)

但这只是给了我

 Error in as.logical(from) : 
   cannot coerce type 'S4' to vector of type 'logical'

我将如何进行此更新?

P.S。我基于这样的事实进行上述尝试:

df$C0 <- df$C0 + 1

这里最简单的解决方案可能是使用 SQL:

# Because it is hard to live without pipes
library(magrittr)

# Create sqlContext
sqlContext <- sparkRSQL.init(sc)
sqlContext <- SQLContext(sc)

# Register table
registerTempTable(df, 'df')

# Query
sql(sqlContext, "SELECT *, IF(C0 = 0, 'yes', 'no') AS C0 FROM df") %>% showDF()

不幸的是,它创建了一个重复的名称,因此它可能会先重命名现有的名称:

df <- df %>% withColumnRenamed(existingCol = 'C0', newCol = 'CO_old')
registerTempTable(df, 'df')
sql(sqlContext, "SELECT *, IF(C0_old = 0, 'yes', 'no') AS C0 FROM df")

或者简单地将 * 替换为您需要的列列表。

也可以使用when / otherwise:

df %>% select(when(df$C) == 0, 'yes') %>% otherwise('no'))