Dataframe 按类型从pyspark数据帧中删除行

Dataframe 按类型从pyspark数据帧中删除行,dataframe,apache-spark,filter,pyspark,Dataframe,Apache Spark,Filter,Pyspark,我在pyspark中有一个包含产品项的大文件,其中一些是精确数字,另一些包含字符串。 我想从数据帧中删除所有带数字的行项目(计算效率高) 如何按pyspark dataframe列中的项目类型筛选行? pyspark过滤器功能似乎没有相应的功能 spark中的k列均为同一类型。如果将两个列与一个并集混用(例如不同类型),spark将尝试转换为这两个列的有效类型,通常是字符串,并放置值的字符串表示形式 示例: 一个字符串列和一个浮点,将导致一个字符串列,浮点表示为一个带小数点的字符串字符串+浮点

我在pyspark中有一个包含产品项的大文件,其中一些是精确数字,另一些包含字符串。 我想从数据帧中删除所有带数字的行项目(计算效率高)

如何按pyspark dataframe列中的项目类型筛选行? pyspark过滤器功能似乎没有相应的功能


spark中的k

列均为同一类型。如果将两个列与一个
并集混用(例如不同类型),spark将尝试转换为这两个列的有效类型,通常是
字符串
,并放置值的字符串表示形式

示例:

  • 一个
    字符串
    列和一个
    浮点
    ,将导致一个
    字符串
    列,浮点表示为一个带小数点的字符串<代码>字符串+浮点=>字符串
  • Integer
    列联合A
    Float
    将所有整数转换为Float<代码>整数+浮点=>Float
  • 对于你的情况将取决于,如果它是一个主题字符串或数字,我会去过滤

    val stringsDF = df.filter(regex_extract($"column", "[0-9]+([.|,][0-9]+)?") === ""))
    

    这将保留所有不跟随浮点或整数值的值。

    spark中的列都是相同类型的。如果将两个列与一个
    并集混用(例如不同类型),spark将尝试转换为这两个列的有效类型,通常是
    字符串
    ,并放置值的字符串表示形式

    示例:

    • 一个
      字符串
      列和一个
      浮点
      ,将导致一个
      字符串
      列,浮点表示为一个带小数点的字符串<代码>字符串+浮点=>字符串
  • Integer
    列联合A
    Float
    将所有整数转换为Float<代码>整数+浮点=>Float
  • 对于你的情况将取决于,如果它是一个主题字符串或数字,我会去过滤

    val stringsDF = df.filter(regex_extract($"column", "[0-9]+([.|,][0-9]+)?") === ""))
    

    这将保留所有不跟随浮点或整数值的值。

    将列转换为
    int
    ,然后仅过滤
    空值列

    • 或者使用类似于
    功能的
    .rlike
    
    
    示例:

    df.show()
    #+---------+-----+
    #|  product|descr|
    #+---------+-----+
    #|Product-1| pj3f|
    #|product-2|   12|
    #+---------+-----+
    
    df.filter(col("descr").cast("int").isNull()).show()
    df.filter(~col("descr").rlike("^([\s\d]+)$")).show()
    #+---------+-----+
    #|  product|descr|
    #+---------+-----+
    #|Product-1| pj3f|
    #+---------+-----+
    

    cast
    将列转换为
    int
    ,然后仅过滤
    空值列

    • 或者使用类似于
    功能的
    .rlike
    
    
    示例:

    df.show()
    #+---------+-----+
    #|  product|descr|
    #+---------+-----+
    #|Product-1| pj3f|
    #|product-2|   12|
    #+---------+-----+
    
    df.filter(col("descr").cast("int").isNull()).show()
    df.filter(~col("descr").rlike("^([\s\d]+)$")).show()
    #+---------+-----+
    #|  product|descr|
    #+---------+-----+
    #|Product-1| pj3f|
    #+---------+-----+
    

    @anky,
    rlike
    与正则表达式匹配,有点像
    like
    @anky,
    rlike
    与正则表达式匹配,有点像
    like