df有一個字串列,如 "100256437"。我想再增加一列來檢查它是否通過了Luhn。如果通過,lit(true),否則lit(false)
。 def Mod10(c: Column)。Column = {
var (odd, sum) = (true, 0)
for (int <- c.reverse.map { _.toString.toShort }) {
println(int)
if (odd) sum = int
else sum = (int * 2 % 10) (int / 5)
odd = !odd
}
lit(sum % 10 === 0)
}
錯誤:
error: value reverse is not a member of org.apache.spark.sql.Column.
for (int <- c.reverse.map { _.toString.toShort }) {
^
錯誤:value ===不是Int的成員
lit(sum % 10 === 0)
uj5u.com熱心網友回復:
看起來,你正在處理Spark Dataframes。
假設你有這樣的資料框架
val df = List("100256437"/span>, "79927398713"/span>) 。 toDF()
df.show()
-----------
|值|
-----------
| 100256437|
|79927398713|
-----------
現在,你可以把這個Luhn測驗作為一個UDF來實作,
val isValidLuhn = udf { (s: String) =>
val array = s.toCharArray.map(_.toString.toInt)
val len = array.length
var i = 1
while (i < len) {
if (i % 2 == 0) {
var updated = array(len - i) * 2
while (edated > 9) {
updated = updated.toString.toCharArray.map(_.toString.toInt).sum
}
array(len - i) = updated
}
i = i 1 val sum = array.sum
println(array.toList)
(sum % 10) ==0
這可以作為,
val dfWithLuhnCheck = df.withColumn("isValidLuhn"/span>, isValidLuhn(col("value"/span>) )
dfWithLuhnCheck.show()
----------- -----------
|值|isValidLuhn|
----------- -----------
| 100256437| true|
|79927398713| true|
----------- -----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/309115.html
標籤:
