본문 바로가기
Hadoop

Spark로 Json파일 읽고 쓰기

by 집못가는프로그래머 2021. 9. 16.

Json은 데이터의 표준 전송 방식이다. 외부의 형태는 파이썬의 Dictionary(딕셔너리)와 매우 흡사하다.

Json파일의 외관 모습의 예

 

 

  • read.json()
#Json파일 읽는법
#sparkSession.read.json()

idColumn = StructField('id',IntegerType(),nullable=False) #컬럼명 중에서 'id'는 Int 형이다 라는 정의, False : Null값 허용 X
nameColumn = StructField('name',StringType(),nullable=False) #컬럼명 중에서 'name'은 문자열 형이다 라는 정의, False : Null값 허용 X
salaryColumn = StructField('salary',IntegerType(), nullable=True) #컬럼명 중에서 'salary'는 Int형이다 라는 정의, True : Null값 허용 O
jobColumn = StructField('job',StringType(),nullable=True) #컬럼명 중에서 'job'dms 문자열 형이다 라는 정의, True : Null값 허용 O


empSchema = StructType([idColumn, nameColumn, salaryColumn, jobColumn])

url = 'hdfs://localhost:9000/user/data/csv/employee_json.json'
empDF2 = sparkSession.read.json(path=url, schema=empSchema)

empDF2.printSchema()
empDF2.show()

* Json파일을 read.json()을 이용해 읽고 데이터 및 스키마를 출력한 것이다.

- Json형식은 기본적으로 Header의 개념이 없기 때문에 read.json()에는 header옵션이 없다.

- read.csv()와 마찬가지로 스키마를 사전에 지정 및 적용할 수 있다.

   -> 물론 inferSchema 옵션 또한 가능하다.

- 읽어온 Json 데이터는 Key값 = 컬럼,  Value = 필드값 형태로 DataFrame에 저장된다.

 

 

  • write.json()
url = 'hdfs://localhost:9000/user/data/csv/employee_with_header.csv'
empDF = sparkSession.read.csv(url, header=True, inferSchema=True)
empDF.printSchema()
empDF.show()

empDF.write.json('hdfs://localhost:9000/user/data/json/tmp', mode='overwrite')

DataFrame 내용
생성된 Json

- Json파일을 읽고 DataFrame객체에 저장한 뒤 DataFrame의 내용을 write.json을 했을 때 결과이다.

- DataFrame을 write.json()을 통해 파일을 생성하면 파일 내용은 Json의 형태를 지닌다.

'Hadoop' 카테고리의 다른 글

Spark를 이용한 hive 접근  (0) 2021.09.23
DataFrame 가공/처리 함수(feat. Spark)  (0) 2021.09.20
DataFrame과 Schema(스키마) (feat. Spark  (0) 2021.09.16
RDD -> DataFrame(feat. Spark)  (0) 2021.09.16
RDD 가공/처리 함수  (0) 2021.09.16

댓글