无法在 spark2.2 中使用 SQLContext 对象创建数据帧



我在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")

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

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

Spark

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


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

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

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


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


您有一个 csv 文件,只需执行以下操作之一即可创建数据帧:


  • 从使用SparkSession变量spark-shellspark

    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]

相关内容

  • 没有找到相关文章