在SparkR中添加前导零

时间:2018-03-08 01:07:02

标签: r apache-spark sparkr leading-zero

我有一个名为DataFrame的Spark nfe,它包含一个名为NFE_CNPJ_EMITENTE的列,当前格式化为字符串(尽管它是完全数字的)。此列应具有长度为11或14个字符的条目,但是我需要添加前导零的9,10,12和13个字符长度的条目。

但是,我不能像在R中那样使用sprintf函数:

nfe$CNPJ_EMITENTE <- ifelse(nfe$length_emit == 9, sprintf("%00s", nfe$NFE_CNPJ_EMITENTE), nfe$NFE_CNPJ_EMITENTE)

# Error in sprintf("%00s", nfe$NFE_CNPJ_EMITENTE) : unsupported type

是否有一种简单的方法可以为9和12个长度条目添加2个前导零,为11个和13个长度条目添加1个前导零?

谢谢!

1 个答案:

答案 0 :(得分:1)

R&#39; getline在使用sparkR s4对象时出现问题。一个简单的解决方案(对于这个和许多其他麻烦的数据操作)是将它变成SQL查询:

ifelse

要选择数据框中的所有变量,查询将如下所示:

#Setup SQL context
sqlContext <- sparkRSQL.init(sc)
sqlContext <- SQLContext(sc)

# Register your dataframe as a table
registerTempTable(df, 'df')

#Query your dataframe
sql(sqlContext, "SELECT [other variables], 
                        case when LENGTH(NFE_CNPJ_EMITENTE) in (9,12) then concat('00',NFE_CNPJ_EMITENTE)
                        when LENGTH(NFE_CNPJ_EMITENTE) in (10,13) then concat('0',NFE_CNPJ_EMITENTE)
                        else NFE_CNPJ_EMITENTE end as NFE_CNPJ_EMITENTE
                  FROM df")