mysql db를 쿼리하고 해당 데이터 프레임을 구축 한 후 다음과 같이 남았습니다.
mydata.show
+--+------+------+------+------+------+------+
|id| sport| var1| var2| var3| var4| var5|
+--+------+------+------+------+------+------+
| 1|soccer|330234| | | | |
| 2|soccer| null| null| null| null| null|
| 3|soccer|330101| | | | |
| 4|soccer| null| null| null| null| null|
| 5|soccer| null| null| null| null| null|
| 6|soccer| null| null| null| null| null|
| 7|soccer| null| null| null| null| null|
| 8|soccer|330024|330401| | | |
| 9|soccer|330055|330106| | | |
|10|soccer| null| null| null| null| null|
|11|soccer|390027| | | | |
|12|soccer| null| null| null| null| null|
|13|soccer|330101| | | | |
|14|soccer|330059| | | | |
|15|soccer| null| null| null| null| null|
|16|soccer|140242|140281| | | |
|17|soccer|330214| | | | |
|18|soccer| | | | | |
|19|soccer|330055|330196| | | |
|20|soccer|210022| | | | |
+--+------+------+------+------+------+------+
모든 var 열은 다음과 같습니다.
string (nullable = true)
따라서 모든 빈 행을 "null"로 변경하여 "null"이있는 빈 셀과 셀을 RDD에 대한 데이터 프레임을 떠나지 않고 동일하게 처리 할 수 있도록하고 싶습니다.
한 가지 옵션은 반대로하는 것입니다. 즉, null을 빈 값으로 대체합니다 (개인적으로 null을 싫어합니다 ...).이 경우 coalesce
함수를 사용할 수 있습니다 .
import org.apache.spark.sql.functions._
val result = input.withColumn("myCol", coalesce(input("myCol"), lit("")))
여러 열에 대해 수행하려면 다음을 수행하십시오.
val cols = Seq("var1", "var2", "var3", "var4", "var5")
val result = cols.foldLeft(input) { case (df, colName) => df.withColumn(colName, coalesce(df(colName), lit(""))) }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다