这是与here相同的问题,但是被接受的答案对我不起作用。
尝试: 我尝试以拼花格式保存一个简单的数据框,并用spark读取它。
问题:pyspark无法解释时间戳列
我做了什么:
我尝试使用以下方式在hfds中将Dask数据帧保存为实木复合地板
double
然后我用pyspark读取文件:
var doubles = samples
.SampleValues
.Where(pair => (pair.Value != null) && !(pair.Value is string)) // not string value
.Select(pair => new {
Name = samples.Name,
Value = Convert.ToDouble(pair.Value), // which we convert to double
});
var strings = samples
.SampleValues
.Where(pair => pair.Value is string)
.Select(pair => new {
Name = samples.Name,
Value = Convert.ToString(pair.Value),
});
但是如果我将数据框保存为
import dask.dataframe as dd
dd.to_parquet(ddf_param_logs, 'hdfs:///user/<myuser>/<filename>', engine='pyarrow', flavor='spark')
utc时间戳列包含unix格式的时间戳信息(1578642290403000)
这是我的环境:
sdf = spark.read.parquet('hdfs:///user/<myuser>/<filename>')
sdf.show()
>>> org.apache.spark.sql.execution.QueryExecutionException: Parquet column cannot be converted in file hdfs://nameservice1/user/<user>/<filename>/part.0.parquet. Column: [utc_timestamp], Expected: bigint, Found: INT96
答案 0 :(得分:3)
明确包括了INT96类型,以允许与spark兼容,后者选择不使用镶木地板规范定义的标准时间类型。不幸的是,似乎它们又改变了,不再使用他们自己的以前的标准,而不是镶木地板。
如果您可以在这里找到spark想要的类型,然后将问题发布到dask仓库中,将不胜感激。您可能希望从包含时间列的spark输出数据,并查看其最终格式为。
您还尝试过fastparquet后端吗?