Я очень новичок в PySpark. У меня было несколько наборов данных ранее в pandas, и мне удалось преобразовать их после Преобразование Pandas dataframe в ошибку Spark dataframe . Я думаю, что они успешно конвертируются:
from pyspark.sql.types import *
# Auxiliar functions
def equivalent_type(f):
if f == 'datetime64[ns]': return DateType()
elif f == 'int64': return LongType()
elif f == 'int32': return IntegerType()
elif f == 'float64': return FloatType()
else: return StringType()
def define_structure(string, format_type):
try: typo = equivalent_type(format_type)
except: typo = StringType()
return StructField(string, typo)
# Given pandas dataframe, it will return a spark's dataframe.
def pandas_to_spark(pandas_df):
columns = list(pandas_df.columns)
types = list(pandas_df.dtypes)
struct_list = []
for column, typo in zip(columns, types):
struct_list.append(define_structure(column, typo))
p_schema = StructType(struct_list)
return sqlContext.createDataFrame(pandas_df, p_schema)
x1_sdf = pandas_to_spark(x1_df)
x2_sdf = pandas_to_spark(x2_df)
x3_sdf = pandas_to_spark(x3_df)
x4_sdf = pandas_to_spark(x4_df)
Это выводит (в блоках данных):
x1_sdf:pyspark.sql.dataframe.DataFrame = [x1x1: string, x1x2: date ... 12 more fields]
x2_sdf:pyspark.sql.dataframe.DataFrame = [x2x1: string, x2x2: string ... 8 more fields]
x3_sdf:pyspark.sql.dataframe.DataFrame = [x3x1: date, x3x2: long ... 1 more fields]
x4_sdf:pyspark.sql.dataframe.DataFrame = [x4x1: date, x4x2: float ... 4 more fields]
Так что я предполагаю, что они конвертированы успешно, я также могу посмотреть на схему, и кажется, правильно. Затем я пытаюсь count()
и получаю следующую ошибку:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 21 in stage 58.0 failed 4 times, most recent failure: Lost task 21.3 in stage 58.0 (TID 704, 10.139.64.16, executor 11): java.util.NoSuchElementException
На самом деле, любая попытка операции с кадром искры, например, x1.head(5)
, вызывает ту же ошибку. Может кто-нибудь, пожалуйста, объясните мне это? Они не преобразованы должным образом?