我试图从一个列中获取列名,并将其作为参数传递给udf。就像。我有一个DataFrame:
| name | array_column | column4 | column5 |
|--------|--------------------|---------|---------|
| first | column4,column5 | V1 | V2 |
| test | column4,column5 | V1 | V2 |
| choose | column3,column5 | V1 | V2 |
df.withcolumn("test",udf(array_column(0),arraycolumn(1)))
其中,array_column(0)
和array_column(1)
分别是column4
和column5
,分别表示数据文件中的两个列名。
我想基本地做udf(column4,column5),但我需要获得array_column值,并将它们作为udf的参数传递。
我试着设置它,但是由于某种原因,列没有被正确地调用。它被调用为String
,而不是数组的元素。
发布于 2019-11-08 06:14:41
您可以尝试以下代码:
首先,创建两个case类来操作数据文件:
case class ResultArray(metric1: Double, metric2: Double, metric3: Double, metric4: Double, metricName: String, opportunityMetricsCol: Array[String])
case class ExpectedResult(value: String)
然后,您可以按以下方式提取预期的列:
val resultArray = Seq(ResultArray(0.55, 0.66012, 164.8204, 4.5,"MetricCalc1", Array("metric1","metric2")),
ResultArray(0.55, 0.66012, 164.8204, 4.5,"MetricCalc1", Array("metric3","metric4")))
+-------+-------+--------+-------+-----------+---------------------+
|metric1|metric2|metric3 |metric4|metricName |opportunityMetricsCol|
+-------+-------+--------+-------+-----------+---------------------+
|0.55 |0.66012|164.8204|4.5 |MetricCalc1|[metric1, metric2] |
|0.55 |0.66012|164.8204|4.5 |MetricCalc1|[metric3, metric4] |
+-------+-------+--------+-------+-----------+---------------------+
val resultArrayDF = resultArray.toDF
val expectedResult: Dataset[ExpectedResult] = resultArrayDF.map{ value =>
val opportunityMetricsCol: util.List[String] = value.getList(5)
ExpectedResult(opportunityMetricsCol.get(0))
}
resultArrayDF.select(expectedResult.first().value).show(false)
expectedResult.show(false)
+-------+
|metric1|
+-------+
|0.55 |
|0.55 |
+-------+
希望这能有所帮助
https://stackoverflow.com/questions/58766905
复制