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

如何替换字符串类型列中的子字符串?

  •  3
  • wishihadabettername  · 技术社区  · 8 年前

    val df2 = df.withColumn("only digits", regexp_replace(col("original"), "[^\\d]", ""))
    

    到它的Java等价物,我在从 org.apache.spark.sql.Column 返回人 col("original") String.replaceAll() .

    cast 仍然返回一个 Column ).

    import org.apache.spark.sql.Column;
    import static org.apache.spark.sql.functions.*;
    Dataset<Row> df2 = df.withColumn("new", col("original").cast("string").replaceAll("[^\\d]", ""));
    

    我还看了一下专栏 javadocs 在上面导入的静态函数中,没有看到任何帮助。谢谢

    2 回复  |  直到 6 年前
        1
  •  8
  •   Community CDub    5 年前

    我在从 org.apache.spark.sql.Column col("original") String 所需类型 String.replaceAll() .

    不会

    你必须与 Column 类型,因为它表示为该列中的每一行生成值的函数。这和Java(确切地说是Scala)的Spark类型系统一样重要。

    functions

    regexp_replace translate 用于您的用例。

    用rep替换指定字符串值中与regexp匹配的所有子字符串。

    translate(列src、字符串匹配字符串、字符串替换字符串) 将src中的任何字符转换为replaceString中的字符。

        2
  •  2
  •   Panagiotis Drakatos    7 年前

      SparkSession spark = SparkSession
                    .builder()
                    .appName("Java Spark SQL basic example")
                    .config("spark.master", "local")
                    .getOrCreate();
            JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
    
    
            List<Row> data = Arrays.asList(
                    RowFactory.create(1, "Hi I heard about *Spark"),
                    RowFactory.create(2, "I wish *Java could use case classes"),
                    RowFactory.create(3, "Logistic regression models are neat")
            );
            StructType schema = new StructType(new StructField[]{
                    new StructField("label", DataTypes.IntegerType, false, Metadata.empty()),
                    new StructField("sentence", DataTypes.StringType, false, Metadata.empty())
            });
            Dataset<Row> sentenceData = spark.createDataFrame(data, schema);
            Dataset<Row> transformedDS=sentenceData.withColumn("Replaced_Sentence", 
                    functions.regexp_replace(sentenceData.col("sentence"),"\\*",""));
            transformedDS.show(false);
    

    +-----+-----------------------------------+-----------------------------------+
    |label|sentence                           |Replaced_Sentence                  |
    +-----+-----------------------------------+-----------------------------------+
    |1    |Hi I heard about *Spark            |Hi I heard about Spark             |
    |2    |I wish *Java could use case classes|I wish Java could use case classes |
    |3    |Logistic regression models are neat|Logistic regression models are neat|
    +-----+-----------------------------------+-----------------------------------+