如果我有一个名为$.ajax({
url: location.origin+'/getcat?t='+id,
dataType:"json"
}).success(function(data){
var array = data.data;
array.forEach(function(print){ // camelCase it
console.log(print.title);
}); // You forgot to add this close block. I guess you have it elsewhere in your code.
});
的文件,其中包含以下数据:
shades.txt
我可以将它存储在SparkSQL中,如下所示:
1 | 1 | dark red
2 | 1 | light red
3 | 2 | dark green
4 | 3 | light blue
5 | 3 | sky blue
但是当我尝试对它运行查询时
var shades_part = sc.textFile("shades.txt")
var shades_data = shades_part.map(line => line.split("\\|").map(elem => elem.trim))
shades_data.toDF().createOrReplaceTempView("shades_data")
我收到错误:
sqlContext.sql("select * from shades_data A where A.shade_name = "dark green")
答案 0 :(得分:3)
您可以将代码的案例类用作
case class Shades(id: Int, colorCode:Int, shadeColor: String)
然后将代码修改为
var shades_part = sc.textFile("shades.txt")
var shades_data = shades_part.map(line => line.split("\\|")).map(elem => Shades(elem(0).trim.toInt, elem(1).trim.toInt, elem(2).trim))
val df = shades_data.toDF()
您应该将数据框设为
+---+---------+----------+
|id |colorCode|shadeColor|
+---+---------+----------+
|1 |1 |dark red |
|2 |1 |light red |
|3 |2 |dark green|
|4 |3 |light blue|
|5 |3 |sky blue |
+---+---------+----------+
现在您可以使用filter
函数作为
df.filter($"shadeColor" === "dark green").show(false)
应该给你
+---+---------+----------+
|id |colorCode|shadeColor|
+---+---------+----------+
|3 |2 |dark green|
+---+---------+----------+
使用架构
您可以将架构创建为
val schema = StructType(Array(StructField("id", IntegerType, true), StructField("colorCode", IntegerType, true), StructField("shadeColor", StringType, true)))
并将sqlContext中的模式用作
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("delimiter", "|")
.schema(schema)
.option("ignoreTrailingWhiteSpace", true)
.option("ignoreLeadingWhiteSpace", true)
.load("shades.txt")
或者您可以将createDataFrame
功能用作
var shades_part = sc.textFile("shades.txt")
var shades_data = shades_part.map(line => line.split("\\|").map(_.trim)).map(elem => Row.fromSeq(Seq(elem(0).toInt, elem(1).toInt, elem(2))))
sqlContext.createDataFrame(shades_data, schema).show(false)
答案 1 :(得分:1)
检查数据帧的架构,您将知道列名称
val dataframe = shades_data.toDF()
dataframe.printSchema()
如果在创建数据框时没有定义列名,则默认情况下它将使用_c0, _c1 ...
作为列名。
或者您可以在创建如下所示的数据框时提供列名称
val dataframe = shades_data.toDF("col1", "col2", "col3")
dataframe.printSchema()
root
|-- col1: integer (nullable = false)
|-- col2: integer (nullable = false)
|-- col3: string (nullable = true)