通过在两列之间添加空列,使用现有数据集创建新数据集



我通过读取csv文件在Spark中使用Java创建了一个数据集。以下是我的初始数据集:

+---+----------+-----+---+
|_c0|       _c1|  _c2|_c3|
+---+----------+-----+---+
|  1|9090999999|NANDU| 22|
|  2|9999999999| SANU| 21|
|  3|9999909090| MANU| 22|
|  4|9090909090|VEENA| 23|
+---+----------+-----+---+

我想按如下方式创建数据帧(一列具有空值):

+---+----+--------+
|_c0| _c1|     _c2|
+---+----|--------+
|  1|null|   NANDU|
|  2|null|    SANU|
|  3|null|    MANU|
|  4|null|   VEENA|
+---+----|--------+

以下是我现有的代码:

Dataset<Row> ds  = spark.read().format("csv").option("header", "false").load("/home/nandu/Data.txt");
Column [] selectedColumns = new Column[2];
selectedColumns[0]= new Column("_c0");
selectedColumns[1]= new Column("_c2");
ds2 = ds.select(selectedColumns);

这将创建数据集,如下所示。

+---+-----+
|_c0|  _c2|
+---+-----+
|  1|NANDU|
|  2| SANU|
|  3| MANU|
|  4|VEENA|
+---+-----+

要选择所需的两列并添加具有空值的新列,您可以使用以下内容:

import org.apache.spark.sql.functions.*;
import org.apache.spark.sql.types.StringType;
ds.select({col("_c0"), lit(null).cast(DataTypes.StringType).as("_c1"), col("_c2")});

尝试以下代码

import org.apache.spark.sql.functions.{ lit => flit}
import org.apache.spark.sql.types._
val ds = spark.range(100).withColumn("c2",$"id")
ds.withColumn("new_col",flit(null: String)).selectExpr("id","new_col","c2").show(5)

希望这有帮助

干杯:)

添加具有字符串空值的新列可能会解决问题。尝试以下代码,尽管它是用scala编写的,但你会明白:

import org.apache.spark.sql.functions.lit
import org.apache.spark.sql.types.StringType
val ds2 = ds.withColumn("new_col", lit(null).cast(StringType)).selectExpr("_c0", "new_col as _c1", "_c2")

相关内容

  • 没有找到相关文章

最新更新