Как создать Pyspark RDD из карты Hazelcast

Я работаю над созданием искровой mlib, где мне нужно прочитать данные с карты Hazelcast и хочу создать RDD/ набор данных / фрейм данных из карты Hazelcast.

Итак, у меня есть данные в виде ключа и значения на карте Hazelcast. И я хочу создать пару pyspark rdd с ним, я не знаю, как это сделать.

Это данные, которые у меня есть в виде пары ключ-значение на карте Hazelcast-

key: '8e5d78d2-8feb-41cd-9e1a-166fbe11c569' 
value: '2,-0.425965884412454,0.960523044882985'
key: 'dfea4b0a-c6f8-4e14-8543-edc53a9d9e07'
value: '2,-1.15823309349523,0.877736754848451'

Это моя программа pyspark mlib, где я читаю с карты Hazelcast.

from pyspark.sql import SparkSession
from pyspark.sql.types import StringType
from pyspark.sql.types import *

import hazelcast, logging
from pyspark.rdd import RDD
config = hazelcast.ClientConfig()
config.network_config.addresses.append('localhost:5701')    
logging.basicConfig()
logging.getLogger().setLevel(logging.INFO)
client = hazelcast.HazelcastClient(config)

############################################

from pyspark import SparkContext, rdd
spark = SparkContext()

# Here my_map is hazelcast map how do I create RDD/dataframe/dataset from this map.
my_map = client.get_map("fraudinputs").blocking()

for key, value in my_map.items:
    print "key:", key, "value:", value

client.shutdown()

1 ответ

Первое, что нужно сделать, это прочитать файл, используя sparkContext.textFile

rdd = sc.textFile("path to the data file")

Затем вы отделяете rdd в ключ rdd и значение rdd

keys = rdd.filter(lambda x: x.find("key") != -1).map(lambda x: x.split("=")[1])
values = rdd.filter(lambda x: x.find("value") != -1).map(lambda x: x.split("=")[1])

последний шаг - объединить их в пару, используя zip

paired = keys.zip(values)

у вас должен быть следующий вывод

(u" '8e5d78d2-8feb-41cd-9e1a-166fbe11c569' ", u" '2,-0.425965884412454,0.960523044882985'")
(u" 'dfea4b0a-c6f8-4e14-8543-edc53a9d9e07'", u" '2,-1.15823309349523,0.877736754848451'")
Другие вопросы по тегам