我通过读取一个csv文件,使用Java在Spark中创建了一个数据集。以下是我的初始数据集:
+---+----------+-----+---+
|_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|
+---+-----+
答案 0 :(得分:2)
要选择所需的两列并添加一个包含空值的新列,可以使用以下命令:
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")});
答案 1 :(得分:1)
尝试以下代码
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)
希望有帮助
干杯:)
答案 2 :(得分:1)
添加具有字符串null值的新列可以解决该问题。尝试使用以下代码,尽管它是用scala编写的,但是您会明白的:
select * from TableA
where userID = x and itemID in
(select itemID from TableB
where categoryID = y)