pyspark로 redis에 데이터를 저장하기 위해 spark-redis를 사용해보았다.
https://redislabs.com/blog/getting-started-redis-apache-spark-python/
# 절차
1. github에서 spark-redis 다운로드
2. maven으로 빌드해서 jar 파일 생성
- target 디렉토리에 target/spark-redis-VERSION-jar-with-dependencies.jar 생성된다.
3. pyspark app에서 spark-redis-*.jar 파일 로딩해서 사용
# example source
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
import pyspark
import pyspark.sql
gHdPath = "hdfs://xxxx:8020/xxx.parquet"
if __name__ == "__main__":
sc = pyspark.SparkConf() \
.setMaster("local[*]") \
.set("spark.driver.memory", "8g") \
.set("spark.executor.memory", "8g") \
.set("spark.driver.maxResultSize", 0) \
.set("spark.jars", "spark-redis-2.4.0-SNAPSHOT-jar-with-dependencies.jar")
sparkContext = pyspark.SparkContext(conf=sc)
spark = pyspark.sql.SparkSession(sparkContext).Builder().appName("spark").\
config("spark.redis.host", "192.168.0.12").\
config("spark.redis.port", "6379").getOrCreate()
retGaDf = spark.read.parquet(gHdPath)
retGaDf.printSchema()
retGaDf.createOrReplaceTempView("USER_PROFILE")
userProfile = spark.sql("select users.created_at, users.external_id, users.custom_events from USER_PROFILE LIMIT 1")
userProfile.show(1, False)
userProfile.write.format("org.apache.spark.sql.redis").option("table", "key_1").save()
# 이슈
spark data frame 형태로만 redis에 저장이 가능한거 같다.
JSON RAW 데이터를 저장할수있는 방법을 찾아보자.
dataframe 형태가 JSON 형태가 되어야하는가?
# 참고 사이트
https://redislabs.com/blog/getting-started-redis-apache-spark-python/
https://github.com/RedisLabs/spark-redis/blob/master/doc/getting-started.md
https://stackoverflow.com/questions/27698111/how-to-add-third-party-java-jars-for-use-in-pyspark
https://stackoverflow.com/questions/35762459/add-jar-to-standalone-pyspark/50142102