为什么在将相同的模式复制到Spark Scala中的另一个dataFrame后,模式数据类型会发生更改

时间:2018-02-16 07:55:39

标签: scala apache-spark spark-dataframe

我有一个架构,其所有列都为StringType,我正在从这里创建一个dataFrame

val rdd = sc.textFile("s3://trfsmallfffile/FinancialSource/MAIN")
val header = rdd.filter(_.contains("Source.organizationId")).map(line => line.split("\\|\\^\\|")).first()
val schema = StructType(header.map(cols => StructField(cols.replace(".", "_"), StringType)).toSeq)
val data = sqlContext.createDataFrame(rdd.filter(!_.contains("Source.organizationId")).map(line => Row.fromSeq(line.split("\\|\\^\\|").toSeq)), schema)

现在我通过复制架构创建另一个dataFrame,但新架构中的数据类型发生了变化,我不知道为什么

如何保留数据相同的数据类型?

以下是我创建新dataFrame的方法

val temp = dfType.select(dfType.columns.filter(x => !x.equals("sr:Auditors")).map(x => col(x).as(x.replace("_", "Source_").replace("sr:", ""))): _*)

//temp.show(false)

val dataMain = df1resultFinal.withColumn("TimeStamp", lit(null: String))

val dfReorder = dataMain.columns.toSeq

val tempReorder=temp.select(dfReorder.map(c => col(c)): _*)

val diff = schema.fieldNames.diff(tempReorder.schema.fieldNames)

val finaldf = diff.foldLeft(tempReorder){(temp2df, colName) => temp2df.withColumn(colName, lit("null"))}

我可以转换每个列并使其成为相同的模式。但是,无论如何都要保留相同的数据类型而不进行转换?

0 个答案:

没有答案