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

时间:2015-06-29 19:23:05

标签: r apache-spark sparkr

我有一个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

1 个答案:

答案 0 :(得分:3)

这里最简单的解决方案可能是使用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'))