[英]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")
希望這可以幫助。
- 初始化SparkSession
- val fileDF = spark.read.format(“ csv”)。option(“ header”,true).load(“ file.csv”)
- 發布此信息,您可以訪問列
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.