我在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文件。那我怎么能纠正我的问题?提前致谢 :)
我解决了在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。我将发布一个关于相同的新问题。
在您的评论参考中,您可以访问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")
val fooDF = spark.sql("SELECT name, age FROM foo WHERE age BETWEEN 13 AND 19")
val df = spark.sql("SELECT * FROM csv.'file:///path to the file/'")
HADOOP_CONF_DIR
环境变量时,会发生错误,而"hdfs://..."
则需要"file://"
。.config("spark.sql.warehouse.dir", "file:///C:/path/to/my/")
它是Hive仓库目录(使用Derby)与托管数据库和表的默认位置。设置仓库目录后,Spark将能够找到您的文件,您可以加载csv。
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]