gpt4 book ai didi

java - 用逗号拆分 Dataset 上的字符串列并获取新的 Dataset

转载 作者:行者123 更新时间:2023-11-29 04:40:49 26 4
gpt4 key购买 nike

我正在使用 Spark(2.0) 开发 Spark SQL,并使用 Java API 读取 CSV。

CSV 文件中有一个双引号、逗号分隔的列。例如:“Express Air,Delivery Truck”

读取CSV并返回Dataset的代码:

Dataset<Row> df = spark.read()
.format("com.databricks.spark.csv")
.option("inferSchema", "true")
.option("header", "true")
.load(filename)

结果:

+-----+--------------+--------------------------+
|Year | State | Ship Mode |...
+-----+--------------+--------------------------+
|2012 |New York |Express Air,Delivery Truck|...
|2013 |Nevada |Delivery Truck |...
|2013 |North Carolina|Regular Air,Delivery Truck|...
+-----+--------------+--------------------------+

但是,我想将 Shop Mode 拆分为 Mode1Mode2 列并作为数据集返回。

+-----+--------------+--------------+---------------+
|Year | State | Mode1 | Mode2 |...
+-----+--------------+--------------+---------------+
|2012 |New York |Express Air |Delivery Truck |...
|2013 |Nevada |Delivery Truck|null |...
|2013 |North Carolina|Regular Air |Delivery Truck |...
+-----+--------------+--------------+---------------+

有什么方法可以使用 Java Spark 做到这一点?

我尝试使用 MapFunction,但 call() 方法没有返回 Row。Ship Mode 将是动态的,即 CSV 可能包含一种或两种 Ship Mode。

谢谢。

最佳答案

您可以使用 selectExpr,它是接受 SQL 表达式 的 select 变体,如下所示:

df.selectExpr("Year","State","split(Ship Mode, ',')[0] as Mode1","split(Ship Mode, ',')[1] as Mode2");

结果是行数据集。

关于java - 用逗号拆分 Dataset<Row> 上的字符串列并获取新的 Dataset<Row>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com