pyspark에서 spark-redis 사용하기 :: 행복한 프로그래머

posted by 쁘로그램어 2019. 7. 25. 18:39

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