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

时间:2017-12-25 06:42:32

标签: scala csv apache-spark apache-spark-sql

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

3 个答案:

答案 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")

注意:会自动创建scsqlContext个变量 但是最新版本有很多改进,即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/'")

  • 当您从本地加载数据时,请确保以本地模式运行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

答案 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]