Как добавить начальное нулевое заполнение с указанным количеством цифр в scala spark? - PullRequest
2 голосов
/ 01 июля 2019

У меня есть data.txt файл, как показано ниже.

12, 345, 6789

Теперь я хочу выполнить начальное заполнение нулями с указанным количеством цифр в указанном поле файла аргумента или стандартного ввода.Количество цифр, указанное в указанном поле файла аргумента, составляет 8 цифр.Что мне делать?

Это мой код:

import org.apache.spark.sql.types._  
import org.apache.spark.sql.types._
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.sql._

//Convert textfile to DF
val conf = new SparkConf().setAppName("ct").setMaster("local").set("spark.driver.allowMultipleContexts", "true")
val sc = SparkContext(conf)
val sparkSess = SparkSession.builder().appName("SparkSessionZipsExample").config(conf).getOrCreate()
val path = "data.txt"
val data = sc.textFile(path)
val colNum = data.first().split(",").size
var schemaString = "key"
for( i <- 1 to colNum - 1) {
 schemaString += " value" + i
}
val fields = schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, nullable=true))
val schema = StructType(fields)
val dfWithSchema = sparkSess.read.option("header", "false").schema(schema).csv(path)
dfWithSchema.show()

//add leading zero padding with the specified number of digits
//The number of digits specified in the specified field of the argument file is 8 digits
val df = dfWithSchema.withColumn("key", format_string("%08d", $"key")).show
val df2 = dfWithSchema.withColumn("value2", format_string("%08d", $"value2")).show

Но результат вывода неправильный.

Я хочу получить желаемый результат вывода, как показано ниже.Пожалуйста, помогите мне.

+---------+------+---------+
|key      |value1|value2   |
+---------+------+---------+
| 00000012|   345| 00006789|
+---------+------+---------+

1 Ответ

1 голос
/ 01 июля 2019

Вы можете использовать встроенную функцию lpad, как показано ниже:

import org.apache.spark.sql.functions.lpad

dfWithSchema.select(
  lpad($"key", 8, "0", 
  lpad($"value2", 8, "0"),
  $"value1"
).show

Это вставит 0 в начале строки максимум для 8 символов.

Пожалуйста, обратитесь здесь для деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...