Я новый ученик Scala. Теперь дан DataFrame с именем df следующим образом:
+-------+-------+-------+-------+
|Column1|Column2|Column3|Column4|
+-------+-------+-------+-------+
| [null]| [0.0]| [0.0]| [null]|
| [IND1]| [5.0]| [6.0]| [A]|
| [IND2]| [7.0]| [8.0]| [B]|
| []| []| []| []|
+-------+-------+-------+-------+
Я хотел бы удалить строки, если все столбцы - пустой массив (4-я строка).
Например, я мог бы ожидать, что результат будет:
+-------+-------+-------+-------+
|Column1|Column2|Column3|Column4|
+-------+-------+-------+-------+
| [null]| [0.0]| [0.0]| [null]|
| [IND1]| [5.0]| [6.0]| [A]|
| [IND2]| [7.0]| [8.0]| [B]|
+-------+-------+-------+-------+
Я пытаюсь использовать isNotNull (например, val temp=df.filter(col("Column1").isNotNull && col("Column2").isNotNull && col("Column3").isNotNull && col("Column4").isNotNull).show()
), но все равно показывает все строки.
Я нашел решение на Python, использующее Hive UDF из link , но мне было нелегко пытаться преобразовать в действительный код scala. Я хотел бы использовать команду scala, похожую на следующий код:
val query = "SELECT * FROM targetDf WHERE {0}".format(" AND ".join("SIZE({0}) > 0".format(c) for c in ["Column1", "Column2", "Column3","Column4"]))
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext.sql(query)
Любая помощь будет оценена. Спасибо.