区块链技术博客
www.b2bchain.cn

使用Java Spark逐行读取大型文本文件 – java程序员分享

本文介绍了使用Java Spark逐行读取大型文本文件 – java程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我正在尝试读取较大的文本文件(2至3 GB)。我需要逐行读取文本文件,并将每一行转换为一个Json对象。我尝试使用.collect()和.toLocalIterator()来读取文本文件。 collect()适用于小文件,但不适用于大文件。我知道.toLocalIterator()会将散布在群集中的数据收集到单个群集中。根据文档,.toLocalIterator()在处理大型RDD时无效,因为它将遇到内存问题。有没有一种有效的方法来读取多节点群集中的大文本文件?

下面是我尝试读取文件并将每行转换为json的各种尝试的方法。

public static void jsonConversion() {     JavaRDD<String> lines = sc.textFile(path);     String newrows = lines.first(); //<--- This reads the first line of the text file       // Reading through with     // tolocaliterator--------------------------------------------      Iterator<String> newstuff = lines.toLocalIterator();      System.out.println("line 1 " + newstuff.next());      System.out.println("line 2 " + newstuff.next());      // Inserting lines in a list.     // Note: .collect() is appropriate for small files     // only.-------------------------     List<String> rows = lines.collect();      // Sets loop limit based on the number on lines in text file.     int count = (int) lines.count();     System.out.println("Number of lines are " + count);      // Using google's library to create a Json builder.     GsonBuilder gsonBuilder = new GsonBuilder();     Gson gson = new GsonBuilder().setLenient().create();      // Created an array list to insert json objects.     ArrayList<String> jsonList = new ArrayList<>();      // Converting each line of the text file into a Json formatted string and     // inserting into the array list 'jsonList'     for (int i = 0; i <= count - 1; i++) {         String JSONObject = gson.toJson(rows.get(i));         Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();         String prettyJson = prettyGson.toJson(rows.get(i));         jsonList.add(prettyJson);     }      // For printing out the all the json objects     int lineNumber = 1;     for (int i = 0; i <= count - 1; i++) {         System.out.println("line " + lineNumber + "-->" + jsonList.get(i));         lineNumber++;     }  } 

以下是我正在使用的库的列表

//Spark Libraries import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext;  //Java Libraries import java.util.ArrayList; import java.util.List; import java.util.Properties;  //Json Builder Libraries import com.google.gson.Gson; import com.google.gson.GsonBuilder; 

参考方案

JavaRDD<String> lines = sc.textFile(path);  JavaRDD<String> jsonList = lines.map(line ->line.split("/")) 

或者您可以在地图内定义新方法

   JavaRDD<String> jsonList = lines.map(line ->{    String newline = line.replace("","")    return newline ; 

})

//不要将JavaRDD转换为DataFrame

Converting JavaRDD to DataFrame in Spark java

dfTobeSaved.write.format("json").save("/root/data.json") 

java:继承 – java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 – java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? – java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java:从类中查找项目名称 – java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…

JAVA 8具有任何匹配属性的对象的过滤器列表 – java

我的要求是通过匹配任何属性的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道,城市,电话。我知道java流过滤器是如何工作的,在这里我必须将输入字符串与每个属性进行比较,如下所示:contactList.stream().filter(contact -> contact.getStreet().equals("dubai&…

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 使用Java Spark逐行读取大型文本文件 – java程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们