我在Microsoft Windows 7上使用spark 2.2 version
。我想在一个变量中加载csv文件以便稍后执行SQL相关操作但无法执行此操作。我引用了this 链接中接受的答案,但没有用。我按照以下步骤创建了SparkContext
对象和SQLContext
对象:
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
val sc=SparkContext.getOrCreate() // Creating spark context object
val sqlContext = new org.apache.spark.sql.SQLContext(sc) // Creating SQL object for query related tasks
对象已成功创建,但是当我执行下面的代码时,会抛出一个无法在此处发布的错误。
val df = sqlContext.read.format("csv").option("header", "true").load("D://ResourceData.csv")
当我尝试像df.show(2)
这样的东西时,它说没有找到df。我尝试了databricks解决方案,用于从附加链接加载CSV。它下载了包,但没有加载csv文件。那我怎么能纠正我的问题?在此先感谢:)
答案 0 :(得分:3)
我在1.6 version
中使用cloudera VM
借助以下代码解决了在数据框中加载本地文件的问题:
1) sudo spark-shell --jars /usr/lib/spark/lib/spark-csv_2.10-1.5.0.jar,/usr/lib/spark/lib/commons-csv-1.5.jar,/usr/lib/spark/lib/univocity-parsers-1.5.1.jar
2) val df1 = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("treatEmptyValuesAsNulls", "true" ).option("parserLib", "univocity").load("file:///home/cloudera/Desktop/ResourceData.csv")
注意:会自动创建sc
和sqlContext
个变量
但是最新版本有很多改进,即2.2.1我无法使用,因为在windows 7中没有创建metastore_db。我会发布一个关于同样的新问题。
答案 1 :(得分:2)
参考您的评论,您可以访问SparkSession
变量,然后按照以下步骤使用 SparkSQL 处理您的csv文件。
Spark SQL是用于结构化数据处理的Spark模块。
主要有两种抽象 - 数据集和数据框:
数据集是分布式数据集合。
DataFrame是一个组织成命名列的数据集。 在Scala API中,DataFrame只是Dataset [Row]的类型别名。
使用SparkSession,应用程序可以从现有RDD,Hive表或Spark数据源创建DataFrame。
您有一个csv文件,您可以通过执行以下操作之一来创建数据框:
使用spark-shell
变量SparkSession
来自spark
:
val df = spark.read
.format("csv")
.option("header", "true")
.load("sample.csv")
将文件读入数据框后,您可以将其注册到临时视图中。
df.createOrReplaceTempView("foo")
可以使用Spark提供的sql方法运行SQL语句
val fooDF = spark.sql("SELECT name, age FROM foo WHERE age BETWEEN 13 AND 19")
您也可以直接使用SQL查询该文件:
val df = spark.sql("SELECT * FROM csv.'file:///path to the file/'")
HADOOP_CONF_DIR
环境变量,并且期望"hdfs://..."
"file://"
,则会发生错误。 设置spark.sql.warehouse.dir(默认值:$ {system:user.dir} / spark-warehouse)。
.config("spark.sql.warehouse.dir", "file:///C:/path/to/my/")
这是Hive仓库目录的默认位置(使用Derby) 使用托管数据库和表。设置仓库目录后,Spark将能够找到您的文件,您可以加载csv。
答案 2 :(得分:0)
Spark版本2.2.0内置了对csv。
的支持在 spark-shell 中运行以下代码
val df= spark.read .option("header","true") .csv("D:/abc.csv") df: org.apache.spark.sql.DataFrame = [Team_Id: string, Team_Name: string ... 1 more field]