我在Windows 10上运行spark 2.1,我已经使用JDBC从MySQL获取数据并且表格看起来像这样
x y z
------------------
1 a d1
Null v ed
5 Null Null
7 s Null
Null bd Null
我想在上表中创建一个只有x and y columns
的新火花数据集,而我不想只保留那两列中任何一列都没有空的那些行。我得到的表应该是这样的
x y
--------
1 a
7 s
以下是代码:
val load_DF = spark.read.format("jdbc").option("url", "jdbc:mysql://100.150.200.250:3306").option("dbtable", "schema.table_name").option("user", "uname1").option("password", "Pass1").load()
val filter_DF = load_DF.select($"x".isNotNull,$"y".isNotNull).rdd
// lets print first 5 values of filter_DF
filter_DF.take(5)
res0: Array[org.apache.spark.sql.Row] = Array([true,true], [false,true], [true,false], [true,true], [false,true])
如图所示,上面的结果并没有给出实际值,但它返回布尔值(当值不是Null时为true,当值为Null时为false)
答案 0 :(得分:1)
试试这个;
val load_DF = spark.read.format("jdbc").option("url", "jdbc:mysql://100.150.200.250:3306").option("dbtable", "schema.table_name").option("user", "uname1").option("password", "Pass1").load()
现在;
load_DF.select($"x",$"y").filter("x !== null").filter("y !== null")
答案 1 :(得分:1)
Spark提供DataFrameNaFunctions用于删除空值等目的
在上面的示例中,您只需要在加载的DataSet上调用以下内容
val noNullValues = load_DF.na.drop("all", Seq("x", "y"))
这将删除在x
或y
字段中出现空值而不是z
的记录。您可以在DataFrameNaFunctions
上阅读更多选项以填写数据,或在需要时翻译值。
答案 2 :(得分:1)
在na.drop中应用“ any”:
df = df.select("x", "y")
.na.drop("any", Seq("x", "y"))
答案 3 :(得分:0)
当您执行isNotNull
时,您只是将一个函数(在本例中为select
)应用于值 - 而是需要将select
替换为filter
。
val filter_DF = load_DF.filter($"x".isNotNull && $"y".isNotNull)
或者如果您愿意:
val filter_DF = load_DF.filter($"x".isNotNull).filter($"y".isNotNull)