gpt4 book ai didi

java - 从来自java中InputStream的字符串创建Spark RDD或数据帧

转载 作者:太空宇宙 更新时间:2023-11-04 11:04:57 24 4
gpt4 key购买 nike

我在java中有一个字符串流。这是来自其他机器上的 csv 文件。我正在创建一个 InputStream 并从 java 中的 BufferedReader 逐行读取 csv 文件,如下所示。

        //call a method that returns inputStream 


InputStream stream = getInputStreamOfFile();

BufferedReader lineStream = new BufferedReader(new InputStreamReader(stream));

while ((inputLine = lineStream.readLine()) != null) {
System.out.println("******************new Line***********");
System.out.println(inputLine);
}
lineStream.close();
stream.close();

现在,我想从中创建一个 Spark RDD 或 DataFrame。

一个解决方案是,我不断在每一行创建新的 RDD 并维护全局 RDD 并继续进行 RDD 的联合。还有其他解决办法吗?

注意:此文件不在同一台计算机上。它来自一些远程存储。我确实有该文件的 HTTP URL。

最佳答案

如果 inputStream 的内容适合内存,我们可以使用以下内容:

private static List<String> displayTextInputStream(InputStream input) throws IOException {
// Read the text input stream one line at a time and display each line.
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
List<String> result = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
result.add(line);
}
return result;
}

现在我们可以转换 List<String>对应RDD .

S3Object fullObject = s3Client.getObject(new GetObjectRequest("bigdataanalytics", each.getKey()));
List<String> listVals = displayTextInputStream(fullObject.getObjectContent());
JavaRDD<String> s3Rdd = sc.parallelize(listVals);

关于java - 从来自java中InputStream的字符串创建Spark RDD或数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46565426/

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