gpt4 book ai didi

java - 使用 java spark 从 csv 中读取列

转载 作者:行者123 更新时间:2023-11-30 09:00:23 25 4
gpt4 key购买 nike

我尝试用 java 和 spark 读取 csv。

现在我这样做:

    String master = "local[2]";
String csvInput = "/home/username/Downloads/countrylist.csv";
String csvOutput = "/home/username/Downloads/countrylist";

JavaSparkContext sc = new JavaSparkContext(master, "loadwholecsv", System.getenv("SPARK_HOME"), System.getenv("JARS"));

JavaRDD<String> csvData = sc.textFile(csvInput, 1);
JavaRDD<List<String>> lines = csvData.map(new Function <String, List<String>>() {
@Override
public List<String> call(String s) {
return new ArrayList<String>(Arrays.asList(s.split("\\s*,\\s*")));
}
});

所以我将 csv 文件的所有“行”作为我的 RDD 中的一行。我还写了这个获取列的方法:

public static JavaRDD<String> getColumn (JavaRDD<List<String>> data, final int index)
{
return data.flatMap(
new FlatMapFunction <List<String>, String>()
{
public Iterable<String> call (List<String> s)
{
return Arrays.asList(s.get(index));
}
}
);
}

但后来我想对列进行许多转换并更改列的位置等。因此,让 RDD 将 COLUMNS 填充为 Arraylists 而不是 LINES 会更容易。

有没有人知道如何实现这一点?我不想调用“getColumn()”n 次。

如果你能帮助我就太好了。

解释:我的 csvData 看起来像这样:

one, two, three
four, five, six
seven, eight, nine

我的行 RDD 看起来像这样:

[one, two, three]
[four, five, six]
[seven, eigth, nine]

但是我想要这个:

[one, four, seven]
[two, five, eight]
[three, six, nine]

最佳答案

要进行基于 map-reduce 的矩阵转置,这基本上是所要求的,您将继续:

  1. 将您的行转换为索引元组:(提示:使用 zipWithIndex 和 map)

    [(1,1,one), (1,2,two), (1,3,three)]
    [(2,1,four), (2,2,five), (2,3,six)]
    [(3,1,seven), (3,2,eigth), (3,3,nine)]
  2. 将列添加为每个元组的键:(提示:使用映射)

    [(1,(1,1,one)), (2,(1,2,two)), (3,(1,3,three))]
    [(1,(2,1,four)), (2,(2,2,five)),(3,(2,3,six))]
    [(1,(3,1,seven)), (2,(3,2,eigth)), (3,(3,3,nine))]
  3. 按键分组

    [(1,[(3,1,seven), (1,1,one), (2,1,four)])]
    [(2,[(1,2,two), (3,2,eigth), (2,2,five)])]
    [(3,[,(2,3,six),(1,3,three), (3,3,nine))])]
  4. 按顺序对值进行排序并删除索引工件(提示: map )

    [ one, four, seven ]
    [ two, five, eigth ]
    [ three, six, nine ]

关于java - 使用 java spark 从 csv 中读取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821707/

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