gpt4 book ai didi

java - Java 中来自 List 的数据框

转载 作者:行者123 更新时间:2023-11-29 09:38:55 25 4
gpt4 key购买 nike

  • Spark 版本:1.6.2
  • Java 版本:7

我有一个 List<String>数据。像这样的东西:

[[dev, engg, 10000], [karthik, engg, 20000]..]

我知道此数据的架构。

name (String)
degree (String)
salary (Integer)

我试过:

JavaRDD<String> data = new JavaSparkContext(sc).parallelize(datas);
DataFrame df = sqlContext.read().json(data);
df.printSchema();
df.show(false);

输出:

root
|-- _corrupt_record: string (nullable = true)


+-----------------------------+
|_corrupt_record |
+-----------------------------+
|[dev, engg, 10000] |
|[karthik, engg, 20000] |
+-----------------------------+

因为 List<String>不是正确的 JSON。

我需要创建一个合适的 JSON 还是有任何其他方法可以做到这一点?

最佳答案

您可以从 List<String> 创建 DataFrame然后使用 selectExprsplit获得所需的 DataFrame。

public class SparkSample{
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("SparkSample").setMaster("local[*]");
JavaSparkContext jsc = new JavaSparkContext(conf);
SQLContext sqc = new SQLContext(jsc);
// sample data
List<String> data = new ArrayList<String>();
data.add("dev, engg, 10000");
data.add("karthik, engg, 20000");
// DataFrame
DataFrame df = sqc.createDataset(data, Encoders.STRING()).toDF();
df.printSchema();
df.show();
// Convert
DataFrame df1 = df.selectExpr("split(value, ',')[0] as name", "split(value, ',')[1] as degree","split(value, ',')[2] as salary");
df1.printSchema();
df1.show();
}
}

您将获得以下输出。

root
|-- value: string (nullable = true)

+--------------------+
| value|
+--------------------+
| dev, engg, 10000|
|karthik, engg, 20000|
+--------------------+

root
|-- name: string (nullable = true)
|-- degree: string (nullable = true)
|-- salary: string (nullable = true)

+-------+------+------+
| name|degree|salary|
+-------+------+------+
| dev| engg| 10000|
|karthik| engg| 20000|
+-------+------+------+

您提供的示例数据有空格。如果你想删除空间并将工资类型设置为“整数”,那么你可以使用 trimcast功能如下。

df1 = df1.select(trim(col("name")).as("name"),trim(col("degree")).‌​as("degree"),trim(co‌​l("salary")).cast("i‌​nteger").as("salary"‌​)); 

关于java - Java 中来自 List<String> 的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43633696/

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