从外部文件过滤数据框
filter dataframe from external file
我想从外部文件中过滤我的数据框。
这是我的数据框的样子:
val Insert=Append_Ot.filter(col("Name2").equalTo("brazil") || col("Name2").equalTo("france") || col("Name2").equalTo("algeria")|| col("Name2").equalTo("tunisia") || col("Name2").equalTo("egypte") )
我想过滤的国家数量是可变的,所以创建了一个外部文件:
1 brazil
2 france
3 algeria
4 tunisia
5 egypte
我想创建 UDF 以从此文件中过滤我的数据框。
谢谢
您需要从要过滤的文件中创建一个 Seq
。
看起来像这样的东西:
val l = List("Brasil", "Algeria", "Tunisia", "Egypt")
您可以使用textFile
方法。假设您的文件包含:
1 Algeria
2 Tunisia
3 Brasil
4 Egypt
您可以使用:
val countries = sc.textFile("hdfs://namenode/user/cloudera/file").map(_.split(" ")(1)).collect
这会给你:
countries : Array[String] = Array(Algeria, Tunisia, Brasil, Egypt)
然后,在您的列 Name2
上使用 isin
函数
val Insert = Append_Ot.where($"Name2".isin( countries : _* ) )
我想从外部文件中过滤我的数据框。 这是我的数据框的样子:
val Insert=Append_Ot.filter(col("Name2").equalTo("brazil") || col("Name2").equalTo("france") || col("Name2").equalTo("algeria")|| col("Name2").equalTo("tunisia") || col("Name2").equalTo("egypte") )
我想过滤的国家数量是可变的,所以创建了一个外部文件:
1 brazil
2 france
3 algeria
4 tunisia
5 egypte
我想创建 UDF 以从此文件中过滤我的数据框。
谢谢
您需要从要过滤的文件中创建一个 Seq
。
看起来像这样的东西:
val l = List("Brasil", "Algeria", "Tunisia", "Egypt")
您可以使用textFile
方法。假设您的文件包含:
1 Algeria
2 Tunisia
3 Brasil
4 Egypt
您可以使用:
val countries = sc.textFile("hdfs://namenode/user/cloudera/file").map(_.split(" ")(1)).collect
这会给你:
countries : Array[String] = Array(Algeria, Tunisia, Brasil, Egypt)
然后,在您的列 Name2
isin
函数
val Insert = Append_Ot.where($"Name2".isin( countries : _* ) )