Scala 为什么SparkSQL UDF返回的数据帧的列名格式为UDF(“原始列名”)?
因此,运行以下代码后得到的数据帧正是我想要的。它与原始数据框相同,但所有包含纯数字数据的单元格都已删除所有括号和斜杠(括号前面用减号替换) stringModifierIterator接收数据帧并返回列表[列]。然后可以像在命令Scala 为什么SparkSQL UDF返回的数据帧的列名格式为UDF(“原始列名”)?,scala,apache-spark,dataframe,apache-spark-sql,user-defined-functions,Scala,Apache Spark,Dataframe,Apache Spark Sql,User Defined Functions,因此,运行以下代码后得到的数据帧正是我想要的。它与原始数据框相同,但所有包含纯数字数据的单元格都已删除所有括号和斜杠(括号前面用减号替换) stringModifierIterator接收数据帧并返回列表[列]。然后可以像在命令dataframe中一样使用List[Column]。选择(List[Column]:*)创建新的数据帧 不幸的是,列名被改成了类似于UDF(“原始列名”)的东西,我不知道为什么 def stringModifierIterator(dataFrame: DataFram
dataframe中一样使用List[Column]。选择(List[Column]:*)
创建新的数据帧
不幸的是,列名被改成了类似于UDF(“原始列名”)的东西,我不知道为什么
def stringModifierIterator(dataFrame: DataFrame, dataFrameColumns: Array[String], uDF: UserDefinedFunction): List[Column] ={
if(dataFrameColumns.isEmpty){
Nil
} else {
uDF(dataFrame(dataFrameColumns.head)) :: stringModifierIterator(dataFrame, dataFrameColumns.tail, uDF)
}
}
val stringModifierFunction: (String => String) = { s: String => Option(s).map(modifier).getOrElse("0") }
def modifier(inputString: String): String = {
???
}
这就是我使用df.show()时列名的样子
您可以通过使用
列在stringModifierIterator
中显式命名您使用UDF创建的列来解决此问题。如
:
def stringModifierIterator(dataFrame: DataFrame, dataFrameColumns: Array[String], uDF: UserDefinedFunction): List[Column] ={
if(dataFrameColumns.isEmpty){
Nil
} else {
val col = dataFrameColumns.head
uDF(dataFrame(col)).as(col) :: stringModifierIterator(dataFrame, dataFrameColumns.tail, uDF)
}
}
顺便说一句,这种方法在没有递归的情况下可以更短、更简单:
def stringModifierIterator(dataFrame: DataFrame, dataFrameColumns: Array[String], uDF: UserDefinedFunction): List[Column] ={
dataFrameColumns.toList.map(col => uDF(dataFrame(col)).as(col))
}
您可以通过使用
Column显式命名在stringModifierIterator
中使用UDF创建的列来解决此问题。as
:
def stringModifierIterator(dataFrame: DataFrame, dataFrameColumns: Array[String], uDF: UserDefinedFunction): List[Column] ={
if(dataFrameColumns.isEmpty){
Nil
} else {
val col = dataFrameColumns.head
uDF(dataFrame(col)).as(col) :: stringModifierIterator(dataFrame, dataFrameColumns.tail, uDF)
}
}
顺便说一句,这种方法在没有递归的情况下可以更短、更简单:
def stringModifierIterator(dataFrame: DataFrame, dataFrameColumns: Array[String], uDF: UserDefinedFunction): List[Column] ={
dataFrameColumns.toList.map(col => uDF(dataFrame(col)).as(col))
}
你能添加输出的样子吗(
dataframe.show())
?刚刚把它添加到我问题的底部你能添加输出的样子吗(dataframe.show())
?刚刚把它添加到我问题的底部