Нужна информация об использовании пользовательского разделителя в Pyspark.У меня есть датафрейм, содержащий данные по странам для разных стран.Так что, если я сделаю перераспределение по столбцу страны, он распределит мои данные по n разделам и сохранит данные о странах по отдельным разделам.Это создает перекос данных раздела, когда я вижу, используя glom()
метод.
В некоторых странах, таких как США и CHN, имеется огромное количество данных в конкретном фрейме данных.Я хочу перераспределить мой фрейм данных таким образом, чтобы, если страны были США и CHN, он далее разделился на 10 разделов, в противном случае разделы остались бы такими же для других стран, таких как IND, THA, AUS и т. Д. Можем ли мы расширить класс разделителей в коде Pyspark.
Я прочитал эту ссылку ниже, что мы можем расширить класс разделителя scala в приложении Spark Scala и изменить класс разделителя, чтобы использовать собственную логику для перераспределения наших данных на основе требований.Как и тот, который у меня есть .. пожалуйста, помогите найти решение в Pyspark. См. Ссылку ниже Какой эффективный способ разделения по столбцам, но с фиксированным числом разделов?
Я использую Spark версии 2.3.0.2 и ниже моя структура данных:
datadf= spark.sql("""
SELECT
ID_NUMBER ,SENDER_NAME ,SENDER_ADDRESS ,REGION_CODE ,COUNTRY_CODE
from udb.sometable
""");
Входящие данные имеют данные для шести стран, такие как AUS
, IND
,THA
, RUS
, CHN
и USA
.CHN
и USA
имеют перекос данных.
, поэтому, если я сделаю repartition
для COUNTRY_CODE
, два раздела содержат много данных, тогда как с другими все в порядке.Я проверил это, используя метод glom()
.
newdf = datadf.repartition("COUNTRY_CODE")
from pyspark.sql import SparkSession
from pyspark.sql import HiveContext, DataFrameWriter, DataFrame
newDF = datadf.repartitionByRange(3,"COUNTRY_CODE","USA")
Я пытался перераспределить свои данные еще на 3 раздела для стран USA
и CHN
и хотел бы сохранить данные других стран в один раздел.
This is what I am expecting
AUS- one partition
IND- one partition
THA- one partition
RUS- one partition
CHN- three partition
USA- three partition
Traceback (последний вызов был последним): файл "", строка 1, в файле "/ usr / hdp / current / spark2-client / python / pyspark / sql / dataframe.py ", строка 1182, в getattr " Объект "% s" не имеет атрибута "% s" "% (self. class . name , name)) AttributeError: у объекта «DataFrame» нет атрибута «repartitionByRange»