我創建了以下資料幀:
val data = spark.sparkContext.parallelize(Seq(("SnVsZXMgTmV3b25l"), ("Jason Kidd"), ("TXIgUm9uYWxkIE0=")))
val df_data = data.toDF()
val decoded_got = df_data.withColumn("xxx", unbase64(col("value")).cast("String"))
我得到以下資訊:
---------------- ------------
|name |xxx |
---------------- ------------
|SnVsZXMgTmV3b25l|Jules Newone|
|Jason Kidd |%?(??? |
|TXIgUm9uYWxkIE0=|Mr Ronald M |
---------------- ------------
我想要做的是避免使用不在 base 64 中的列名的值。例如,獲取以下內容Df:
---------------- ------------
|name |xxx |
---------------- ------------
|SnVsZXMgTmV3b25l|Jules Newone|
|Jason Kidd |Jason Kidd |
|TXIgUm9uYWxkIE0=|Mr Ronald M |
---------------- ------------
我正在嘗試這樣的事情,但對我不起作用:
val regex1 = """^([A-Za-z0-9 /]{4})*([A-Za-z0-9 /]{3}=|[A-Za-z0-9 /]{2}==)?$"""
val check = df_data.withColumn("xxx", when(regex1 matches col("value"), unbase64(col("value"))).otherwise(col("value")))
Spark Scala 中是否有選項可以檢查值是否在 base64 中,或者我該怎么做?
uj5u.com熱心網友回復:
要檢查該值是否為有效的 base64 編碼字串,您可以嘗試對其進行解碼并再次編碼,您應該得到初始值。如果不是,則它不是 base64 字串:
val decoded_got = df_data.withColumn(
"xxx",
when(
base64(unbase64(col("value"))) === col("value"),
unbase64(col("value")).cast("string")
).otherwise(col("value"))
)
decoded_got.show
// ---------------- ------------
//| value| xxx|
// ---------------- ------------
//|SnVsZXMgTmV3b25l|Jules Newone|
//| Jason Kidd| Jason Kidd|
//|TXIgUm9uYWxkIE0=| Mr Ronald M|
// ---------------- ------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383934.html
