Каждая строка информационной диаграммы Spark df
содержит строку с разделителями табуляции в столбце rawFV
. Я уже знаю, что разделение на вкладке даст array of 3 strings
для всех строк. Это может быть проверено:tokenizer in spark dataframe API
df.map(row => row.getAs[String]("rawFV").split("\t").length != 3).filter(identity).count()
и убедившись, что количество действительно 0
.
Мой вопрос: как это сделать, используя API конвейера?
Вот что я пробовал:
val tabTok = new RegexTokenizer().setInputCol("rawFV").setOutputCol("tk").setPattern("\t")
val pipeline = new Pipeline().setStages(Array(tabTok))
val transf = pipeline.fit(df)
val df2 = transf.transform(df)
df2.map(row => row.getAs[Seq[String]]("tk").length != 3).filter(identity).count()
который НЕ равно 0
.
Проблема связана с наличием недостающих значений. Например:
Код трубопровода с RegexTokenizer
вернутся 3 поля на первой линии, но только 2 на втором. С другой стороны, первый код правильно вернул бы 3 поля всюду.
Было бы гораздо полезнее представить примерные данные, которые могут быть использованы для воспроизведения проблемы. – zero323
Это связано с наличием отсутствующих значений. Например, если у вас есть файл с разделителями табуляции, подобный этому: «a \ ta \ ta \ nb \ t \ tb». Я бы получил 3 поля в первой строке, но только 2 во втором – ranlot
Не могли бы вы добавить этот вопрос? – zero323