Работа над проблемой, когда мне нужно добавить новый столбец, который содержит длину всех символов под всеми столбцами.
Мой пример набора данных:
ItemNumber,StoreNumber,SaleAmount,Quantity, Date
2231 , 1 , 400 , 2 , 19/01/2020
2145 , 3 , 500 , 10 , 14/01/2020
Ожидаемый результат будет be
19 20
Идеальный выход, который я собираюсь построить, - это новый столбец Длина , добавленный к фрейму данных
ItemNumber,StoreNumber,SaleAmount,Quantity, Date , Length
2231 , 1 , 400 , 2 , 19/01/2020, 19
2145 , 3 , 500 , 10 , 14/01/2020, 20
Мой код
val spark = SparkSession.builder()
.appName("SimpleNewIntColumn").master("local").enableHiveSupport().getOrCreate()
val df = spark.read.option("header","true").csv("./data/sales.csv")
var schema = new StructType
df.schema.toList.map{
each => schema = schema.add(each)
}
val encoder = RowEncoder(schema)
val charLength = (row :Row) => {
var len :Int = 0
row.toSeq.map(x => {
x match {
case a : Int => len = len + a.toString.length
case a : String => len = len + a.length
}
})
len
}
df.map(row => charLength(row))(encoder) // ERROR - Required Encoder[Int] Found EncoderExpression[Row]
df.withColumn("Length", ?)
У меня есть две проблемы
1) Как решить ошибку «ОШИБКА - Обязательный кодировщик [Int] Найдено кодовое выражение [Строка]»?
2) Как добавить вывод функции charLength в качестве нового значения столбца? - df.withColumn («Длина»,?)
Спасибо.
Gurupraveen