Wenn ich eine Zeile Datenrahmen wie folgt zusammensetzen bringt meine Methode erfolgreich den erwarteten Datenrahmen zurück.Apache Spark 2.0.0 PySpark manuelle Dataframe Erstellung Kopf scratcher
def build_job_finish_data_frame(sql_context, job_load_id, is_success):
job_complete_record_schema = StructType(
[
StructField("job_load_id", IntegerType(), False),
StructField("terminate_datetime", TimestampType(), False),
StructField("was_success", BooleanType(), False)
]
)
data = [
Row(
job_load_id=job_load_id,
terminate_datetime=datetime.now(),
was_success=is_success
)
]
return sql_context.createDataFrame(data, job_complete_record_schema)
Wenn ich die „terminate_datetime“ auf „end_datetime“ oder „finish_datetime“ ändern, wie unten gezeigt einen Fehler wirft.
def build_job_finish_data_frame(sql_context, job_load_id, is_success):
job_complete_record_schema = StructType(
[
StructField("job_load_id", IntegerType(), False),
StructField("end_datetime", TimestampType(), False),
StructField("was_success", BooleanType(), False)
]
)
data = [
Row(
job_load_id=job_load_id,
end_datetime=datetime.now(),
was_success=is_success
)
]
return sql_context.createDataFrame(data, job_complete_record_schema)
Der Fehler, den ich erhalten ist
TypeError: IntegerType can not accept object datetime.datetime(2016, 10, 5, 11, 19, 31, 915745) in type <class 'datetime.datetime'>
Ich kann "terminate_datetime" auf "start_datetime" und haben mit anderen Worten experimentiert.
Ich sehe keinen Grund für Feldnamenänderungen diesen Code zu brechen, da es nichts mehr tut, als einen manuellen Datenrahmen aufzubauen.
Das ist besorgniserregend, da ich Datenframes verwende, um ein Data Warehouse zu laden, wo ich keine Kontrolle über die Feldnamen habe.
I PySpark auf Python 3.3.2 auf Fedora 20.