无法使用spark2.2中的SQLContext对象创建数据框

问题描述 投票:2回答:3

我在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文件。那我怎么能纠正我的问题?提前致谢 :)

scala csv apache-spark apache-spark-sql
3个回答
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")

注意:scsqlContext变量是自动创建的但是最新版本有许多改进,即2.2.1我无法使用,因为在windows 7中没有创建metastore_db。我将发布一个关于相同的新问题。


2
投票

在您的评论参考中,您可以访问SparkSession变量,然后按照以下步骤使用SparkSQL处理您的csv文件。

Spark SQL是用于结构化数据处理的Spark模块。


主要有两种抽象 - 数据集和数据帧:

数据集是分布式数据集合。

DataFrame是一个组织成命名列的数据集。在Scala API中,DataFrame只是Dataset [Row]的类型别名。


使用SparkSession,应用程序可以从现有RDD,Hive表或Spark数据源创建DataFrame。


您有一个csv文件,您可以通过执行以下操作之一来创建数据框:


  • 从你的spark-shell使用SparkSession变量sparkval 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 Programming Guide


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]
© www.soinside.com 2019 - 2024. All rights reserved.