【发布时间】:2021-09-08 12:03:27
【问题描述】:
使用以下架构创建了一个数据集
org.apache.spark.sql.Dataset[Records] = [value: string, RowNo: int]
这里的值字段是固定长度位置,我想将其转换为单个列并使用 UDF 添加 RowNo 作为最后一列。
def ReadFixWidthFileWithRDD(SrcFileType:String, rdd: org.apache.spark.rdd.RDD[(String, String)], inputFileLength: Int = 6): DataFrame = {
val postapendSchemaRowNo=StructType(Array(StructField("RowNo", StringType, true)))
val inputLength =List(inputFileLength)
val FileInfoList = FixWidth_Dictionary.get(SrcFileType).toList
val fileSchema = FileInfoList(0)._1
val fileColumnSize = FileInfoList(0)._2
val fileSchemaWithFileName = StructType(fileSchema++postapendSchemaRowNo)
val fileColumnSizeWithFileNameLength = fileColumnSize:::inputLength
val data = rdd
var retDF = spark.createDataFrame(data.map{ x =>;
lsplit(fileColumnSizeWithFileNameLength,x._1+x._2)},fileSchemaWithFileName )
retDF
}
现在在上面的函数中,我想使用数据集而不是 Rdd,因为我的 RowNo 没有显示超过 99999 的值。
有人可以提出替代方案
【问题讨论】:
标签: scala apache-spark user-defined-functions databricks