代码之家  ›  专栏  ›  技术社区  ›  giorgionasis

基于Scala的Spark数据帧多重滤波

  •  0
  • giorgionasis  · 技术社区  · 6 年前

    我正在尝试筛选此txt文件

    TotalCost|BirthDate|Gender|TotalChildren|ProductCategoryName
    1000||Male|2|Technology
    2000|1957-03-06||3|Beauty
    3000|1959-03-06|Male||Car
    4000|1953-03-06|Male|2|
    5000|1957-03-06|Female|3|Beauty
    6000|1959-03-06|Male|4|Car
    

    我只是想过滤每一个原始数据,如果一列有空元素,就删除它。

    在我的示例数据集中,有三个是空的。

    然而,当我运行代码时,我得到了一个空的数据模式。我错过什么了吗?

    这是我在scala中的代码

    import org.apache.spark.sql.SparkSession
    
    object DataFrameFromCSVFile {
    
      def main(args:Array[String]):Unit= {
    
       val spark: SparkSession = SparkSession.builder()
      .master("local[*]")
      .appName("SparkByExample")
      .getOrCreate()
    
     val filePath="src/main/resources/demodata.txt"
    
     val df = spark.read.options(Map("inferSchema"->"true","delimiter"->"|","header"->"true")).csv(filePath)
    
     df.where(!$"Gender".isNull && !$"TotalChildren".isNull).show
     }
    }
    

    项目在IntelliJ上

    多谢各位

    2 回复  |  直到 6 年前
        1
  •  2
  •   NNK    6 年前

    你可以用多种方法来做。。下面是一个例子。

    import org.apache.spark.sql.SparkSession
    
    object DataFrameFromCSVFile2 {
    
      def main(args:Array[String]):Unit= {
    
        val spark: SparkSession = SparkSession.builder()
          .master("local[1]")
          .appName("SparkByExample")
          .getOrCreate()
    
        val filePath="src/main/resources/demodata.tx"
    
        val df = spark.read.options(Map("inferSchema"->"true","delimiter"->"|","header"->"true")).csv(filePath)
    
        val df2 = df.select("Gender", "BirthDate", "TotalCost", "TotalChildren", "ProductCategoryName")
          .filter("Gender is not null")
          .filter("BirthDate is not null")
          .filter("TotalChildren is not null")
          .filter("ProductCategoryName is not null")
        df2.show()
    
      }
    }
    

    输出:

    +------+-------------------+---------+-------------+-------------------+
    |Gender|          BirthDate|TotalCost|TotalChildren|ProductCategoryName|
    +------+-------------------+---------+-------------+-------------------+
    |Female|1957-03-06 00:00:00|     5000|            3|             Beauty|
    |  Male|1959-03-06 00:00:00|     6000|            4|                Car|
    +------+-------------------+---------+-------------+-------------------+
    

    谢谢 纳文

        2
  •  0
  •   Sc0rpion    6 年前

    您可以从数据帧中筛选它,如下所示, df.where(!$“性别”。isNull和!$“TotalChildren”。isNull)。显示