java – 与csv文件相比,将mysql表转换为spark数据集的速度非常慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 与csv文件相比,将mysql表转换为spark数据集的速度非常慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2156字,纯文字阅读大概需要4分钟。
内容图文
![java – 与csv文件相比,将mysql表转换为spark数据集的速度非常慢](/upload/InfoBanner/zyjiaocheng/912/152f0a6f3e4d4268af3ca48a5eadf72a.jpg)
我在亚马逊s3中有csv文件,大小为62mb(114000行).我正在将其转换为spark数据集,并从中获取前500行.代码如下;
DataFrameReader df = new DataFrameReader(spark).format("csv").option("header", true);
Dataset<Row> set=df.load("s3n://"+this.accessId.replace("\"", "")+":"+this.accessToken.replace("\"", "")+"@"+this.bucketName.replace("\"", "")+"/"+this.filePath.replace("\"", "")+"");
set.take(500)
整个操作需要20到30秒.
现在我尝试相同但是使用csv我正在使用带有119 000行的mySQL表. MySQL服务器在亚马逊ec2.代码如下;
String url ="jdbc:mysql://"+this.hostName+":3306/"+this.dataBaseName+"?user="+this.userName+"&password="+this.password;
SparkSession spark=StartSpark.getSparkSession();
SQLContext sc = spark.sqlContext();
DataFrameReader df = new DataFrameReader(spark).format("csv").option("header", true);
Dataset<Row> set = sc
.read()
.option("url", url)
.option("dbtable", this.tableName)
.option("driver","com.mysql.jdbc.Driver")
.format("jdbc")
.load();
set.take(500);
这需要5到10分钟.
我在jvm里面运行火花.在两种情况下使用相同的配置.
我可以使用partitionColumn,numParttition等但我没有任何数字列,还有一个问题是我不知道该表的模式.
我的问题不是如何减少所需的时间,因为我知道在理想情况下火花将在集群中运行,但我无法理解的是为什么在上述两种情况下这个大的时间差异?
最佳答案:
StackOverflow上已多次覆盖此问题:
> How to improve performance for slow Spark jobs using DataFrame and JDBC connection?
> spark jdbc df limit… what is it doing?
> How to use JDBC source to write and read data in (Py)Spark?
在外部资源中:
所以重申一下 – 默认情况下,DataFrameReader.jdbc不会分发数据或读取.它使用单线程,单个exectuor.
分发阅读:
>使用lowerBound / upperBound的范围:
Properties properties;
Lower
Dataset<Row> set = sc
.read()
.option("partitionColumn", "foo")
.option("numPartitions", "3")
.option("lowerBound", 0)
.option("upperBound", 30)
.option("url", url)
.option("dbtable", this.tableName)
.option("driver","com.mysql.jdbc.Driver")
.format("jdbc")
.load();
>谓词
Properties properties;
Dataset<Row> set = sc
.read()
.jdbc(
url, this.tableName,
{"foo < 10", "foo BETWWEN 10 and 20", "foo > 20"},
properties
)
内容总结
以上是互联网集市为您收集整理的java – 与csv文件相比,将mysql表转换为spark数据集的速度非常慢全部内容,希望文章能够帮你解决java – 与csv文件相比,将mysql表转换为spark数据集的速度非常慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。