Pyspark создает новый фрейм данных с обновлением нескольких столбцов из старого фрейма данных - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу создать новый фрейм данных с обновлением данных из нескольких столбцов в старом фрейме данных в pyspark.

У меня есть ниже фрейм данных с форматом паркета, который имеет столбцы, такие как uid, name, start_dt, addr, extid

df = spark.read.parquet("s3a://testdata?src=ggl")
df1 = df.select("uid")

Мне нужно создать новый фрейм данных в паркете с хешированным uid ии включите оставшиеся столбцы.Подскажите пожалуйста как это сделать?Я новичок: (

Пример ввода:

uid, name, start_dt, addr, extid
1124569-2, abc, 12/02/2018, 343 Beach Dr Newyork NY, 889

Пример вывода:

uid, name, start_dt, addr, extid
a8ghshd345698cd, abc, 12/02/2018, 343 Beach Dr Newyork NY, shhj676ssdhghje

Здесь uid и extid хешируются sha256.

Спасибозаранее.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

pyspark уже имеет встроенную функцию для генерации sha-256 в pyspark.sql.functions модуле.

Создание данных выборки

from pyspark.sql.functions import sha2
df1 = spark.createDataFrame(
    [
        Row(
            uid="1124569-2",
            name="abc",
            start_dt="12/02/2018",
            addr="343 Beach Dr Newyork NY",
            extid="889"
        )
     ]
)        
df1.show()
#+--------------------+-----+----+----------+---------+
#|                addr|extid|name|  start_dt|      uid|
#+--------------------+-----+----+----------+---------+
#|343 Beach Dr Newy...|  889| abc|12/02/2018|1124569-2|
#+--------------------+-----+----+----------+---------+

Хэширование выбранных столбцов:

df1.select(
    sha2(df1['uid'],256).alias('uid'),
    sha2(df1['extid'],256).alias('extid'),
    'addr',
    'name',
    'start_dt'
).show()
#+--------------------+--------------------+--------------------+----+----------+
#|                 uid|               extid|                addr|name|  start_dt|
#+--------------------+--------------------+--------------------+----+----------+
#|4629619cdf1cbeed6...|a829c72c42755e384...|343 Beach Dr Newy...| abc|12/02/2018|
#+--------------------+--------------------+--------------------+----+----------+

Нам не нужно создавать udf s для этого.

0 голосов
/ 11 декабря 2018

Вы можете создать функцию UDF, которая будет вызывать hashlib.sha256() для столбца и использовать withColumn для преобразования столбца.

import pyspark.sql.functions as F
import pyspark.sql.types as T
import hashlib

df = spark.read.parquet("s3a://testdata?src=ggl")

sha256_udf = F.udf(lambda x: hashlib.sha256(str(x).encode('utf-8')).hexdigest(), T.StringType()) 
df1 = df.withColumn('uid', sha256_udf('uid')).withColumn('extid', sha256_udf('extid'))
df1.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...