Как подсчитать количество строк в файле JSON? - PullRequest
0 голосов
/ 30 сентября 2018

Мой файл JSON ниже содержит шесть строк:

[
    {"events":[[{"v":"INPUT","n":"type"},{"v":"2016-08-24 14:23:12 EST","n":"est"}]],
     "apps":[],
     "agent":{"calls":[],"info":[{"v":"7990994","n":"agentid"},{"v":"7999994","n":"stationid"}]},
     "header":[{"v":"TUSTX002LKVT1JN","n":"host"},{"v":"192.168.1.18","n":"ip"},{"v":"V740723","n":"vzid"},{"v":"16.3.16.0","n":"version"},{"v":"12","n":"cpu"},{"v":"154665","n":"seq"},{"v":"2016-08-24 14:23:17 EST","n":"est"}]
    },
{"events":[[{"v":"INPUT","n":"type"},{"v":"2016-08-24 14:23:14 EST","n":"est"}]],"apps":[],"agent":{"calls":[],"info":[{"v":"7990994","n":"agentid"},{"v":"7999994","n":"stationid"}]},"header":[{"v":"TUSTX002LKVT1JN","n":"host"},{"v":"192.168.1.18","n":"ip"},{"v":"V740723","n":"vzid"},{"v":"16.3.16.0","n":"version"},{"v":"5","n":"cpu"},{"v":"154666","n":"seq"},{"v":"2016-08-24 14:23:23 EST","n":"est"}]},
{"events":[[{"v":"LOGOFF","n":"type"},{"v":"2016-08-24 14:24:04 EST","n":"est"}]],"apps":[],"agent":{"calls":[],"info":[{"v":"7990994","n":"agentid"},{"v":"7999994","n":"stationid"}]},"header":[{"v":"TUSTX002LKVT1JN","n":"host"},{"v":"192.168.1.18","n":"ip"},{"v":"V740723","n":"vzid"},{"v":"16.3.16.0","n":"version"},{"v":"0","n":"cpu"},{"v":"154667","n":"seq"},{"v":"2016-08-24 14:24:05 EST","n":"est"}]},
{"events":[],"apps":[[{"v":"ccSvcHst","n":"pname"},{"v":"7704","n":"pid"},{"v":"Old Virus Definition File","n":"title"},{"v":"O","n":"state"},{"v":"5376","n":"mem"},{"v":"0","n":"cpu"}]],"agent":{"calls":[],"info":[{"v":"7990994","n":"agentid"},{"v":"7999994","n":"stationid"}]},"header":[{"v":"TUSTX002LKVT1JN","n":"host"},{"v":"192.168.0.5","n":"ip"},{"v":"V740723","n":"vzid"},{"v":"16.3.16.0","n":"version"},{"v":"29","n":"cpu"},{"v":"154668","n":"seq"},{"v":"2016-09-25 16:57:24 EST","n":"est"}]},
{"events":[],"apps":[[{"v":"ccSvcHst","n":"pname"},{"v":"7704","n":"pid"},{"v":"Old Virus Definition File","n":"title"},{"v":"F","n":"state"},{"v":"5588","n":"mem"},{"v":"0","n":"cpu"}]],"agent":{"calls":[],"info":[{"v":"7990994","n":"agentid"},{"v":"7999994","n":"stationid"}]},"header":[{"v":"TUSTX002LKVT1JN","n":"host"},{"v":"192.168.0.5","n":"ip"},{"v":"V740723","n":"vzid"},{"v":"16.3.16.0","n":"version"},{"v":"16","n":"cpu"},{"v":"154669","n":"seq"},{"v":"2016-09-25 16:57:30 EST","n":"est"}]},
{"events":[],"apps":[[{"v":"ccSvcHst","n":"pname"},{"v":"7704","n":"pid"},{"v":"Old Virus Definition File","n":"title"},{"v":"F","n":"state"},{"v":"5588","n":"mem"},{"v":"0","n":"cpu"}]],"agent":{"calls":[],"info":[{"v":"7990994","n":"agentid"},{"v":"7999994","n":"stationid"}]},"header":[{"v":"TUSTX002LKVT1JN","n":"host"},{"v":"192.168.0.5","n":"ip"},{"v":"V740723","n":"vzid"},{"v":"16.3.16.0","n":"version"},{"v":"17","n":"cpu"},{"v":"154670","n":"seq"},{"v":"2016-09-25 16:57:36 EST","n":"est"}]}
]

JSON выглядит следующим образом:

JSON
0
1
2
3
4
5

Обязательный вывод:

Count
6

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Файл из трех записей, которые у меня есть - с правильным форматированием, Spark 2.x., считывание в фрейм данных / набор данных:

import org.apache.spark.sql.Column
import org.apache.spark.sql.functions._

val df = spark.read
        .option("multiLine", true)
        .option("mode", "PERMISSIVE")
        .option("inferSchema", true)
        .json("/FileStore/tables/json_01.txt")

df.select("*").show(false)
df.printSchema()
df.count()

Если подсчитать только общее количество, то этого будет достаточно, последнийлиния.

res15: Long = 3
0 голосов
/ 01 октября 2018

Хорошо, вы находитесь в Spark, и вам нужно превратить свой Json в набор данных и использовать соответствующую операцию над ним.Итак, здесь я написал рабочий процесс для перехода от Json к набору данных в целом и необходимые шаги с примерами.Я думаю, что этот способ ответа более полезен, потому что вы можете видеть шаги, а затем вы можете решить, что делать с информацией.

  1. Входные данные : у вас есть Json, то есть ваши данные, с которыми вы должны начать работать.Затем вам нужно решить, какие поля важны.Подсчет сам по себе - это небольшая часть большинства случаев, и вы не хотите загружать все поля, которые могут не быть необходимыми.

  2. Создать класс наблюдений : вы можете использовать классы наблюдений, потому что тогда вы можете сериализовать свои входные данные.Проще говоря, у меня есть врач, который принадлежит к отделу, и я получаю данные в Json.У меня могут быть следующие классы дел:

    case class Department(name: String, address: String)
    case class Doctor(name: String, department: Department)
    

    , поэтому, как видно из приведенного выше кода, я иду снизу вверх, чтобы создать данные, над которыми я хочу работать.У вас, Джсон, есть множество полей (например, v), которые я не могу понять, что стоит за этим.Поэтому будьте осторожны, чтобы не перепутать их.

  3. Иметь набор данных : Хорошо, приведенный ниже код сериализует Json с классом случая, который мы определили:

    spark.read.json("doctorsData.json).as[Doctor]
    

    пара точек.spark - это сеанс искры, который вам нужно создать.Здесь его экземпляр spark это может быть что угодно.Вам также необходимо import spark.implicits._.

  4. В бизнесе! : Хорошо, теперь вы в бизнесе и в мире Spark.Это просто вопрос использования count() для подсчета вашего набора данных.Следующий метод показывает, как считать это:

    def recordsCount(myDataset: Dataset[Doctor]): Long = myDataset.count()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...