【问题标题】:Split one column into multiple columns in Spark DataFrame using comma separator使用逗号分隔符将一列拆分为 Spark DataFrame 中的多列
【发布时间】:2019-11-07 13:00:37
【问题描述】:

我想在 Java Spark 中使用逗号分隔符从 Dataframe 的一列创建多列。

我在DataFrame 的一列中有一个带逗号的值,我想使用逗号分隔符拆分为多列。我有以下代码:

Dataset<Row> dfreq1 = spark.read().format("json").option("inferSchema", "true")
            .load("new.json");

    dfreq1.show(5, 300);


    dfreq1.createOrReplaceTempView("tempdata");

    Dataset<Row> dfreq2 = dfreq1.sqlContext().sql("select split(names, '|') from tempdata");

    dfreq2.show(5, 300);

输入

+----------------------------+
|                         name|
+-----------------------------+
|ABC1,XYZ1,GDH1,KLN1,JUL1,HAI1|
|ABC2,XYZ2,GDH2,KLN2,JUL2,HAI2|
+-----------------------------+

输出

+-----------------------------+
| Cl1| Cl2| Cl3| Cl3|Cl4 | Cl4|
+-----------------------------+
|ABC1|XYZ1|GDH1|KLN1|JUL1|HAI1|
|ABC2|XYZ2|GDH2|KLN2|JUL2|HAI2|
+-----------------------------+

【问题讨论】:

  • 根据','分值,按值getItem
  • 您可以将其保存为文本,然后读取为 csv
  • 谢谢。我不清楚这一点。能否提供java代码
  • @Tamil 你知道拆分后固定的列数吗?

标签: apache-spark java-8 apache-spark-sql


【解决方案1】:

你可以试试这个

scala> var dfd =Seq(("ABC1,XYZ1,GDH1,KLN1,JUL1,HAI1"),("ABC2,XYZ2,GDH2,KLN2,JUL2,HAI2")).toDF("name")

scala> dfd.withColumn("temp", split(col("name"), ",")).select((0 until 6).map(i => col("temp").getItem(i).as(s"col$i")): _* ).show
+----+----+----+----+----+----+
|col0|col1|col2|col3|col4|col5|
+----+----+----+----+----+----+
|ABC1|XYZ1|GDH1|KLN1|JUL1|HAI1|
|ABC2|XYZ2|GDH2|KLN2|JUL2|HAI2|
+----+----+----+----+----+----+

希望对你有帮助

【讨论】:

  • 谢谢@Mahesh Gupta。我将 Spark 与 Java8 一起使用。如果你提供java中的代码,那就太好了。
  • @Tamil 我认为您只需要将语法从 scala 更改为 java 它必须是 Works
【解决方案2】:
 List<String> schemaList =  Arrays.asList("name","gender","sale_amount","event","age","shop_time");
    Column column = functions.col("value");
    Column linesSplit = functions.split(column,"@#");
    for(int i=0;i<schemaList.size();i++){
        lines = lines.withColumn(schemaList.get(i),linesSplit.getItem(i));
    }

【讨论】:

    【解决方案3】:

    您将此列中的 csv 读入数据集

    Dataset<Row> df= spark.read
      .option("header",false)
      .option("inferSchema",true)
      .option("delimiter", ",")
      .csv(originalDF.map(x=>x.getString(0)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2017-01-07
      相关资源
      最近更新 更多