我有一个名为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个前导零?
谢谢!
答案 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")