我是Hadoop和Spark的新手。我正在尝试在我的本地系统上使用4核和32 GB-Ram处理近100 GB的数据。我的代码花费了一个半小时来计算数据。我做错了什么吗?请帮助我的代码如下
public class ReadCSV {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
SparkSession sparkSession = SparkSession.builder().appName("CsvReader")
.master("local[4]")
.config("spark.sql.debug.maxToStringFields", 100)
.getOrCreate();
SparkContext sparkContext = sparkSession.sparkContext();
sparkContext.setLogLevel("ERROR");
try {
String filePath = "/mnt/vol2/OpenLR/openlr/processedData/Monday/*/*/*.csv";
Dataset<Row> dataset = sparkSession.read().option("header", "true").option("inferSchema", "true").csv(filePath);
System.out.println("Total: " + dataset.count());
System.out.println("Time taken to complete: " + (System.currentTimeMillis() - startTime));
} catch(Exception e) {
e.printStackTrace();
}
sparkContext.stop();
sparkSession.close();
}
}
2条答案
按热度按时间xqk2d5yq1#
如果您确信文件的数据质量,则可以尝试删除推断架构。
请检查:Performance Overhead..
lg40wkob2#
代码看起来很简单,但是由于数据是在一个装载的磁盘上,所以我怀疑大部分时间都浪费在了网络上读取100 GB的数据上。
如果数据在同一台处理机器上,那么阅读速度和磁盘可以处理的争用量(因为spark将并行读取多个文件)仍然会影响最终的吞吐量/时间
根据Spark调谐指南
数据局部性对Spark作业的性能有很大的影响,如果数据和操作它的代码在一起,那么计算速度会很快。