我在Microsoft Windows 7上使用spark 2.2 version
。我想在一个变量中加载 csv 文件以便稍后执行与 SQL 相关的操作,但无法这样做。我从这个链接中引用了接受的答案,但没有用。我按照以下步骤创建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。我尝试了从附加链接加载CSV的数据砖解决方案。它下载包,但不加载 csv 文件。那么我该如何纠正我的问题呢?提前致谢:)
在以下代码的帮助下,我解决了在数据帧中使用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)中有许多改进,我无法使用metastore_db因为它不是在 Windows 7 中创建的。我将发布一个关于相同的新问题。
参考您的评论,您可以访问SparkSession
变量,然后按照以下步骤使用SparkSQL处理您的 csv 文件。
SQL是一个用于结构化数据处理的Spark模块。
主要有两种抽象 -数据集和数据帧:
数据集是数据的分布式集合。
数据帧是组织成命名列的数据集。 在 Scala API 中,DataFrame 只是 Dataset[Row] 的类型别名。
使用 SparkSession,应用程序可以从现有 RDD、Hive 表或 Spark 数据源创建数据帧。
您有一个 csv 文件,只需执行以下操作之一即可创建数据帧:
从使用
SparkSession
变量spark-shell
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/'")
- 确保从本地加载数据时在本地模式下运行 spark,否则会出现错误。当您已经设置了环境变量
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。
参考 : Spark SQL 编程指南
Spark版本 2.2.0 内置了对 csv 的支持。
在火花壳中运行以下代码
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]