Apache spark 在spark shell中编写.csv文件的查询
谁能告诉我如何使用spark shell for.csv文件编写查询 我所取得的成就是使用DataRicks库读取.csv文件并创建一个dataframe,如下所示:Apache spark 在spark shell中编写.csv文件的查询,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,谁能告诉我如何使用spark shell for.csv文件编写查询 我所取得的成就是使用DataRicks库读取.csv文件并创建一个dataframe,如下所示: ./spark-shell --packages.com.databricks:spark-csv_2.10:1.4.0 import org.apache.spark.sql.SQLContext val sqlContect = new SQLContext(sc) val df = sqlContext.read.forma
./spark-shell --packages.com.databricks:spark-csv_2.10:1.4.0
import org.apache.spark.sql.SQLContext
val sqlContect = new SQLContext(sc)
val df = sqlContext.read.format("com.databricks.spark.csv") .option("header", "true").load("mylocalpath.csv")
然后我可以毫无问题地执行df.printSchema和其他datafram操作。但我想知道我如何写一些查询
我在上看到了说明,它提到了一些关于以编程方式指定模式的内容,我遵循了它的过程,只是读取.csv文件而不是textfile,但是当我执行val rowRDD=people.map\uuz.split.mapp=>Rowp0,p1.trim时,我收到一个错误,说value split不是org.apache.spark.sql.Row的成员。我如何解决这个问题
如果有更简单的方法来编写sql查询,请告诉我。我最终想做的是选择两列,一列表示id,一列表示价格,然后返回最高价格,就这么简单
df.printSchema如下所示:
|-TAXROLL\u编号:字符串可空=真
|-建筑名称:字符串nullable=true
|-评估值:字符串可空=真
|-街道名称:字符串nullable=true
|-邮政编码:字符串nullable=true
|-城市:字符串nullable=true
|-生成年份:字符串nullable=true
|-Lon:string nullable=true
|-Lat:string nullable=true我不确定我是否完全理解您的意思,但您可能只需要
df.registerTempTable("TblName") //temp table registration
或
和查询
sqlContext.sql("select * from TblName limit 100").take(100).foreach(println)
或任何其他spark sql查询
我认为您的问题是由于在阅读了spark CSV包的CSV后尝试进行RDD工作造成的。此包返回的类型如您所述-org.apache.spark.sql.Row。
您可以轻松地使用RDD方法-只需使用textFile读取csv文件。例:
case class tmpSchema(TAXROLL_NUMBER: String, BUILDING_NAME: String, ASSESSED_VALUE: String, STREET_NAME: String, CITY: String) // etc.
val toTable = sc.textFile(pathString).map(_.split(",")).map(p => tmpSchema(p(0), p(1) ,p(2), p(3), p(4)). toDF.registerTempTable("tblName2")
此方法不需要使用DataRicks csv包。另一方面,如果您的数据有一些封装和转义字符,那么最好使用CSV包。Java Code Spark 2.0.0
package com.example.SparkReadFile;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.functions;
public class Driver
{
public static void main(String[] args) throws Exception {
SparkSession spark = SparkSession
.builder()
.appName("Csv reader")
.master("local")
// .enableHiveSupport()
.getOrCreate();
Dataset<Row> df = spark.read()
.format("csv")
.option("header", "true")
.option("nullValue", "")
.csv("file:///Users/karuturi/Desktop/sample.csv");
df.registerTempTable("people"); //temp table registration
Dataset<Row> sqlDF = spark.sql("SELECT * FROM people");
sqlDF.show();
}
}
您可以编辑问题并显示printSchema的输出吗?一旦有了一个有效的数据框架和一个有效的模式,就可以很好地进行查询了。如果你打印模式,我会告诉你如何打印。是的,我已经编辑了我的帖子
package com.example.SparkReadFile;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.functions;
public class Driver
{
public static void main(String[] args) throws Exception {
SparkSession spark = SparkSession
.builder()
.appName("Csv reader")
.master("local")
// .enableHiveSupport()
.getOrCreate();
Dataset<Row> df = spark.read()
.format("csv")
.option("header", "true")
.option("nullValue", "")
.csv("file:///Users/karuturi/Desktop/sample.csv");
df.registerTempTable("people"); //temp table registration
Dataset<Row> sqlDF = spark.sql("SELECT * FROM people");
sqlDF.show();
}
}