header 的 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
并在其下包含 header。如何设置 header 并使用 SQL 查询?我见过这个解决方案:
val df = spark.read
.option("header", "true") //reading the headers
.csv("file.csv")
但这不允许我使用 WHERE
子句执行 SELECT
查询。有没有办法指定 CSV header 并执行 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")
希望对您有所帮助。
- Initialize SparkSession
- val fileDF = spark.read.format("csv").option("header",true).load("file.csv")
- Post this you can have access to columns
import spark.implicits._
fileDF.select($"columnName").where(conditions)
首先,如果您正在使用 Spark 2.0 o 稍后尝试开始使用 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")
因此您可以select您的专栏使用正确的名称
val etl = df.select("firstcolumn").where("secondcolumn=0")
事实证明 header 没有被正确解析。 CSV 文件是 tab-delimited 所以我必须明确指定:
val csvContents = sqlContext.read
.option("delimiter", "\t")
.option("header", "true")
.csv(csvPath)
.select("*")
.where(s"col_id=22")
我正在使用 SQLContext 读取 CSV 文件,如下所示:
val csvContents = sqlContext.read.sql("SELECT * FROM
csv.`src/test/resources/afile.csv` WHERE firstcolumn=21")
但它会将第一列打印为 _c0
并在其下包含 header。如何设置 header 并使用 SQL 查询?我见过这个解决方案:
val df = spark.read
.option("header", "true") //reading the headers
.csv("file.csv")
但这不允许我使用 WHERE
子句执行 SELECT
查询。有没有办法指定 CSV header 并执行 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")
希望对您有所帮助。
- Initialize SparkSession
- val fileDF = spark.read.format("csv").option("header",true).load("file.csv")
- Post this you can have access to columns
import spark.implicits._
fileDF.select($"columnName").where(conditions)
首先,如果您正在使用 Spark 2.0 o 稍后尝试开始使用 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")
因此您可以select您的专栏使用正确的名称
val etl = df.select("firstcolumn").where("secondcolumn=0")
事实证明 header 没有被正确解析。 CSV 文件是 tab-delimited 所以我必须明确指定:
val csvContents = sqlContext.read
.option("delimiter", "\t")
.option("header", "true")
.csv(csvPath)
.select("*")
.where(s"col_id=22")