SparkSQL DataFrame报错:show不是DataFrameReader成员,求解决方案
解决Spark 1.6加载CSV时
show()方法报错的问题 嘿,刚接触Spark/Scala/DataFrames遇到这个问题很正常,我来帮你理清问题出在哪以及怎么解决~
核心问题分析
你遇到的error: value show is not a member of org.apache.spark.sql.DataFrameReader报错,本质有两个原因:
- Spark 1.6.0没有内置CSV数据源:和Spark 2.0及以后版本不同,1.6版本需要依赖第三方的CSV处理包才能读取CSV文件;
- 方法调用对象错误:
show()是DataFrame类的方法,而你是在DataFrameReader对象上调用了它——read方法返回的是DataFrameReader,它的作用是配置读取参数,只有调用load()后才会生成真正的DataFrame,这时候才能用show()。
具体解决步骤
1. 启动Scala Shell时引入CSV依赖包
Spark 1.6需要用Databricks提供的spark-csv包,启动Shell时要指定这个包(注意版本要和你的Scala、Spark版本匹配):
spark-shell --packages com.databricks:spark-csv_2.10:1.5.0
这里_2.10对应你的Scala 2.10.5,1.5.0是适配Spark 1.6.0的spark-csv版本。
2. 正确的CSV读取代码
在Shell里按以下顺序执行,就能成功生成DataFrame并调用show():
// 导入CSV相关类(Shell可能自动导入,但手动引入更稳妥) import com.databricks.spark.csv._ // Spark 1.6用SQLContext来创建DataFrame,Shell里已经自动初始化了sqlContext // 配置CSV读取参数并加载文件生成DataFrame val df = sqlContext.read.format("com.databricks.spark.csv") .option("header", "true") // 如果你的CSV文件有表头,就设为true,否则false .option("inferSchema", "true") // 让Spark自动推断每列的数据类型 .load("/你的CSV文件路径/xxx.csv") // 现在调用show(),这是DataFrame的方法,就不会报错了 df.show()
避坑提醒
- 不要用Spark 2.0+的
spark.read写法,Spark 1.6里没有SparkSession,要基于sqlContext来操作; - 一定要确保先调用
load()生成DataFrame,再调用show(),别把方法调用在DataFrameReader上。
内容的提问来源于stack exchange,提问作者stud333
相关产品推荐
相关产品推荐

