sparksql 練習題兩道


第一題:
select '{"id":1,"name":{"url":"http://xxx/yyy/zz/test.js"}}'
##1 獲取 //xxx/yyy/zz/test.js中的 xxx和 js
##2 獲取 ip地址中的第一組數字

#### method 1
select split(get_json_object('{"id":1,"@name":{"url":"/xxx/yyy/zz/test.test_2.js"}}','$.@name.url'),'/')[1] as test,
reverse(split(reverse(get_json_object('{"id":1,"name":{"url":"/xxx/yyy/zz/test.tes-t_2.js"}}','$.name.url')),'\\.')[0]) as test2,
split("12.13.14.15.16","\\.")[0] as ip_first_num;

#### method2
select regexp_extract(get_json_object('{"id":1,"@name":{@url":"/test.test_2.js"}}','$.`@name.url`'),'^/([^/]+)/') as test,
regexp_extract(get_json_object('{"id":1,"name":{"url":"/xxx/yyy/zz/test.tes-t_2.js"}}','$.name.url'),"([^\\.]+$)") as test2,
regexp_extract("12.13.14.15.16","([0-9]+)") as ip_first_num;

 第二題:

日常工作中,我們常用elasticsearch來存儲數據,如果想轉移一部分生產上的es某索引到本地或測試環境中,如果使用 sparksql來怎么做?

使用 es官方提供的包,如 elasticsearch-spark-20_2.11xxx.jar 很方便使用 sql來操作 elasticsearch的索引。


######讀取elasticsearch索引的數據,並存儲為json

import org.elasticsearch.spark.sql
val df = spark.read.format("org.elasticsearch.spark.sql").option("es.nodes","localhost:9200").load("sparksql-test9")
df.write.json("file:///tmp/json")
執行完你會發現 /tmp/json 文件夾下有幾個json文件,打開查看
你會發現{} 每一條記錄都是doc


#####讀取json數據寫入到elasticsearch索引中去,測試環境中使用的是spark2.4 es6.8
val json=spark.read.json("tmp/json")
df.write.format("org.elasticsearch.spark.sql").option("es.resource","sparksql-test9/_doc").option("es.nodes","172.17.0.3:9200").mode("Append").save

spark.sql寫出的 json文件不適合使curl bulk upload的方式
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/sparksql-test10/_doc/_bulk?pretty' \
--data-binary @part-00000-82438c55-612b-48df-b710-4c896f2e66f3-c000.json

 這種方式需要json中有元數據,如文檔的id

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM