我对ElasticSearch很新:我正在尝试使用Spark in Java从索引中读取数据。
我有一段工作代码,但是它返回一个数据集中的文档,其中列只有两个" root" doc的元素,而所有剩余的数据都以JSON格式存储在这些列中。
这是我的代码:
SparkConf sparkConf = new SparkConf(true);
sparkConf.setAppName(Test.class.getName());
SparkSession spark = null;
try {
spark = SparkSession.builder().config(sparkConf).getOrCreate();
} catch (Exception e) {
sparkConf.setMaster("local[*]");
sparkConf.set("spark.cleaner.ttl", "3600");
sparkConf.set("es.nodes", "1.1.1.1");
sparkConf.set("es.port", "9999");
sparkConf.set("es.nodes.discovery", "false");
sparkConf.set("es.nodes.wan.only", "true");
spark = SparkSession.builder().config(sparkConf).getOrCreate();
Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(Level.ERROR);
}
SQLContext sqlContext = spark.sqlContext();
Dataset<Row> df1 = JavaEsSparkSQL.esDF(sqlContext, "index/video");
df1.printSchema();
df1.show(5, false);
Spark推断的非常简化版本的架构是:
root
|-- aaa: struct (nullable = true)
| |-- bbbb: array (nullable = true)
| | |-- cccc: struct (containsNull = true)
| | | |-- dddd: string (nullable = true)
| | | |-- eeee: string (nullable = true)
| |-- xxxx: string (nullable = true)
|-- ffff: struct (nullable = true)
| |-- gggg: long (nullable = true)
| |-- hhhh: boolean (nullable = true)
| |-- iiii: struct (nullable = true)
| | |-- vvvv: string (nullable = true)
| | |-- llll: array (nullable = true)
| | | |-- oooo: struct (containsNull = true)
| | | | |-- wwww: long (nullable = true)
| | | | |-- rrrr: string (nullable = true)
| | | | |-- tttt: long (nullable = true)
| | |-- pppp: string (nullable = true)
使用show()我可以从Spark得到的就像
+-------------------+-------------------+
|aaaa |ffff |
+-------------------+-------------------+
|[bbbb,cccc] |[1,false,null] |
|[bbbb,dddd] |[1,false,null] |
|[bbbb] |[1,false,null] |
|[bbbb] |[1,false,null] |
|[null,eeee] |[1,false,null] |
+-------------------+-------------------+
only showing top 5 rows
有没有办法在每行中获取数据(例如bbbb)而不在Spark中处理它们? (即有没有办法直接从ElasticSearch获取这些数据?)
答案 0 :(得分:0)
解决。
这太简单了,我甚至没试过:你可以用点表示法访问嵌套数据。要获得xxxx项的值,只需
df1.select("aaaa.xxxx").show(5, false);
结果
+--------+
|xxxx |
+--------+
|35992783|
|35994342|
|35973981|
|35984563|
|35979054|
+--------+
only showing top 5 rows