簡體   English   中英

帶標頭的Spark SQLContext查詢

[英]Spark SQLContext Query with header

我正在使用SQLContext讀取CSV文件,如下所示:

val csvContents = sqlContext.read.sql("SELECT * FROM 
                  csv.`src/test/resources/afile.csv` WHERE firstcolumn=21")

但是它將第一列打印為_c0並包括其下的標題。 如何設置標題並使用SQL查詢? 我看過這個解決方案:

 val df = spark.read
         .option("header", "true") //reading the headers
         .csv("file.csv")

但是,這不允許我使用WHERE子句進行SELECT查詢。 有沒有一種方法可以指定CSV標頭並執行SQL SELECT查詢?

從數據框創建視圖后,可以使用sql查詢。 這樣的事情。

val df = spark.read
  .option("header", "true") //reading the headers
  .csv("file.csv")

df.createOrReplaceTempView("table")

val sqlDf = spark.sql("SELECT * FROM table WHERE firstcolumn=21")

希望這可以幫助。

  1. 初始化SparkSession
  2. val fileDF = spark.read.format(“ csv”)。option(“ header”,true).load(“ file.csv”)
  3. 發布此信息,您可以訪問列
     import spark.implicits._  
     fileDF.select($"columnName").where(conditions)

首先,如果您使用的是Spark 2.0,請稍后再嘗試使用SparkSession代替SparkContext,如果列數較小,則作為另一種選擇,我建議您這樣做

import org.apache.spark.sql.types._    
val schema = StructType(
  StructField("firstcolumn", StringType, true), 
  StructField("secondcolumn", IntegerType, true)
)

val df = spark.
  read.
  option("header", true).
  schema(schema).
  csv("file.csv")

因此,您可以選擇具有正確名稱的列

val etl = df.select("firstcolumn").where("secondcolumn=0")

事實證明,標頭未正確解析。 CSV文件以制表符分隔,因此我必須明確指定:

val csvContents = sqlContext.read
        .option("delimiter", "\t")
        .option("header", "true")
        .csv(csvPath)
        .select("*")
        .where(s"col_id=22")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM