Выберите ненулевые столбцы из строки искры - PullRequest
0 голосов
/ 15 февраля 2019

Итак, у меня есть строка искры x (тип: org.apache.spark.sql.Row), и я хочу преобразовать ее в другую искру y со всеми удаленными пустыми столбцами.

Я пишу работу с потоковым воспроизведением, которая выполняет некоторые преобразования потоковых данных и сохраняет их в Casssandra, и я пересекаю поток по строкам, поэтому все мои преобразования будут на уровне строк, а не на уровне фреймов данных.

//Read stream 
val df = spark
      .readStream
      .format("kafka")
      .options(kafkaParams)
      .load()

//Tried below on dataframe level, not working(probably because each row might have different set of columns that are not null?).
val tf_df = df.select(df.columns.filter(!col(_).equals(null)).map(df(_)) : _*)

//Then I decided to do the transformation while writing the stream.
enter code here
val cassandraUpdater = tf_df
      .writeStream
      .queryName("updateCassandra")
      .outputMode("update")
      .foreach(new CassandraUpdater(spark))
      .start()

cassandraUpdater.awaitTermination()

И мой CassandraUpdater является классом, расширяющим ForeachWriter [org.apache.spark.sql.Row] и пытается выполнить преобразования строк перед записью его в Cassandra.

Итак, теперь, возвращаясь к исходному вопросу, у меня есть строка искры x (тип: org.apache.spark.sql.Row), и я хочу преобразовать в другую искру y со всеми удаленными пустыми столбцами,Я попытался преобразовать строку искры в Map [String, Any] и удалить нулевые значения, но затем я теряю схему, и она тоже не кажется эффективной.

Итак, если у меня есть строка x: org.apache.spark.sql.Row = [null, 1549861200001, null, 23, null, «asd», null, null]

Я бы хотел, чтобы y было: org.apache.spark.sql.Row = [1549861200001,23, "asd"]

Заранее спасибо.

...