У меня есть данные, которые выглядят примерно так:
one=1&two=22222&three=&four=4f4
Как видите, значение переменной three отсутствует. Я хотел бы использовать Scala Regex, чтобы захватить все значения и вернуть их через запятую.
Желаемый результат:
1,22222,,4f4
Другой, более желательный, возможный результат:
1,22222,undefined,4f4
Это мой текущий код (я использую scala со Spark 2.0 для кадра данных):
def main(args: Array[String]) {
...
val pattern : scala.util.matching.Regex = """[^&?]*?=([^&?]*)""".r
df.select(transform(pattern)($"data").alias("csvData")).take(100).foreach(println)
}
def transform(pattern: scala.util.matching.Regex) = udf(
(dataMapping: String) => pattern.findAllIn(dataMapping).toList
)
Что возвращает:
[WrappedArray(one=1, two=22222, three=, four=4f4)]
[WrappedArray(...)]
Я думаю, что могу лучше справиться с моей функцией «преобразования» udf, но я очень новичок в Scala и не знаю, как просто сопоставить первые группы и вернуть их через запятую. Я бы предположил, что в своем решении я бы использовал что-то вроде m => m.group(1), но я не уверен. Спасибо вам за ваши предложения.
String => Array
в udf не работает должным образом? 15.11.2016