У меня есть файл XML, содержащий все преобразования, которые мне нужно выполнить для DataFrame
с помощью функции withColumn
, как показано ниже: Как я могу применить его к DataFrame
.
У меня был написанный код с использованием Scala
ToolBox
и runTmirror
, которые внутренне компилируют код и запускают эти правила поверх DataFrame
. Что отлично работало менее чем для 100 столбцов. Но теперь требование было изменено, и количество столбцов увеличилось с 80 до 210, поэтому этот код не работает из-за StackOverflow error
. Что является открытой проблемой для Scala 2.11 (https://github.com/scala/bug/issues/10026)
Поэтому я хочу использовать любую утилиту Spark вместо Scala ToolBox. Я также пытался использовать foldLeft
, но это также дает ошибку, так как я не могу передать функцию столбца (например, lit
или concat
и т. д.) в качестве типа столбца.
Файлы правил XML:
<?xml version="1.0" encoding="utf-8" ?>
- <root>
- <columns>
- <column name="col1">
- <![CDATA[ data("columnA")
]]>
</column>
- <column name="col2">
- <![CDATA[lit("ABC")
]]>
</column>
- <column name="col3">
- <![CDATA[concat(col(columnC),col(columnD))
]]>
</column>
</column>
- <column name="col4">
- <![CDATA[ regexp_replace(regexp_replace(regexp_replace(col("ColumnE"), "\\,|\\)", "") , "\\(", "-") , "^(-)$", "0").cast("double")
]]>
</column>
- <column name="col5">
- <![CDATA[ lit("")
]]>
</column>
.
.
.
.
.
</columns>
</root>
Операции, которые мне нужно использовать как
df.withColumn("col1",data("columnA")).withColumn("col2",lit("ABC")).withColumn("col3",concat(col(columnC), col(columnD))).withColumn("col4",regexp_replace(regexp_replace(regexp_replace(col("ColumnE"), "\\,|\\)", "") , "\\(", "-") , "^(-)$", "0").cast("double"))withColumn("col5",lit("")).........
Версия, которую я использую:
Скала 2.11.12
Искра 2.4.3