this is my code
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
from abc import ABC, abstractmethod
import threading
class ThreadedTask(ABC):
@abstractmethod
def process_chunk(self, data):
pass
class Subclass1(ThreadedTask):
def process_chunk(self, data):
print("Subclass 1 processing chunk")
data.show()
class Subclass2(ThreadedTask):
def process_chunk(self, data):
print("Subclass 2 processing chunk")
data.groupBy(col("column_name")).count().show()
class Subclass3(ThreadedTask):
def process_chunk(self, data):
print("Subclass 3 processing chunk")
class CsvSplitterProcessor:
def __init__(self, spark, csv_path, num_chunks):
self.spark = spark
self.csv_path = csv_path
self.num_chunks = num_chunks
self.subclasses = [Subclass1(), Subclass2(), Subclass3()]
def process(self):
print("Starting processing")
data = self.spark.read.csv(self.csv_path)
data_rdd = data.rdd
split_data = data_rdd.repartition(self.num_chunks)
def process_chunk_iterator(iterator):
dataframe = self.spark.createDataFrame(iterator)
for subclass in self.subclasses:
subclass.process_chunk(dataframe)
split_data.foreachPartition(process_chunk_iterator)
print(split_data.getNumPartitions())
def process_chunk(self, iterator):
dataframe = self.spark.createDataFrame(
iterator)
print(dataframe.show())
for subclass in self.subclasses:
subclass.process_chunk(dataframe)
spark = SparkSession.builder.appName("2").getOrCreate()
csv_path = r"\input\data.csv"
processor = CsvSplitterProcessor(
spark, csv_path, 3)
processor.process()
spark.stop()