我是新的spark和python,并且面临从可以应用于我的数据文件的元数据文件构建模式的困难.场景:数据文件的元数据文件(csv格式),包含列及其类型:例如:
id,int,10,"","",id,"","",TRUE,"",0
created_at,timestamp,"","","",created_at,"","",FALSE,"",0
Run Code Online (Sandbox Code Playgroud)
我已成功将其转换为数据框,如下所示:
+--------------------+---------------+
| name| type|
+--------------------+---------------+
| id| IntegerType()|
| created_at|TimestampType()|
| updated_at| StringType()|
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用它将其转换为StructField格式时
fields = schemaLoansNew.map(lambda l:([StructField(l.name, l.type, 'true')]))
Run Code Online (Sandbox Code Playgroud)
要么
schemaList = schemaLoansNew.map(lambda l: ("StructField(" + l.name + "," + l.type + ",true)")).collect()
Run Code Online (Sandbox Code Playgroud)
然后使用将其转换为StructType
schemaFinal = StructType(schemaList)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/mapr/spark/spark-1.4.1/python/pyspark/sql/types.py", line 372, in __init__
assert all(isinstance(f, DataType) for f in fields), "fields should be a list of DataType"
AssertionError: fields should be a list …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其日期格式如下:
+----------------------+
|date |
+----------------------+
|May 6, 2016 5:59:34 AM|
+----------------------+
Run Code Online (Sandbox Code Playgroud)
我打算以格式从中提取日期YYYY-MM-DD; 所以结果应该是上述日期 - 2016-05-06.
但是当我提取时使用以下内容:
df.withColumn('part_date', from_unixtime(unix_timestamp(df.date, "MMM dd, YYYY hh:mm:ss aa"), "yyyy-MM-dd"))
Run Code Online (Sandbox Code Playgroud)
我得到以下日期
2015-12-27
Run Code Online (Sandbox Code Playgroud)
任何人都可以就此提出建议吗?我不打算将我的df转换为rdd来使用python中的datetime函数,并希望在自己的数据框架中使用它.