在 SparkR 中添加前导零
Adding leading zeros in SparkR
我有一个名为 nfe
的 Spark DataFrame
,它包含一个名为 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 个前导零?
谢谢!
R 的 ifelse
在处理 sparkR s4 对象时遇到问题。一个简单的解决方案(对于这个和许多其他麻烦的数据操作)是将其变成 SQL 查询:
#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")
对于 select 数据框中的所有变量,查询将如下所示:
sql(sqlContext, "SELECT df.*,
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_RECODED
FROM df")
我有一个名为 nfe
的 Spark DataFrame
,它包含一个名为 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 个前导零?
谢谢!
R 的 ifelse
在处理 sparkR s4 对象时遇到问题。一个简单的解决方案(对于这个和许多其他麻烦的数据操作)是将其变成 SQL 查询:
#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")
对于 select 数据框中的所有变量,查询将如下所示:
sql(sqlContext, "SELECT df.*,
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_RECODED
FROM df")