H2O 应该识别 parquet 文件的数据类型并预先设置它们。保存镶木地板文件时,您可能会将数字列设置为字符串/分类。你有什么 parquet 文件将列数据类型保存为?
我在 H2O 3.30.0.1 上验证了数据类型将被 parquet 文件定义的内容识别。见下文。
使用 iris 数据集中的缺失值创建数字列 (sepal_len)
#Read a dataset
iris = h2o.import_file("http://h2o-public-test-data.s3.amazonaws.com/smalldata/iris/iris_wheader.csv")
#Convert one value to None
iris[0, 0] = None
#Make it as pandas df and save as parquet as
df = iris.as_data_frame()
df.to_parquet('iris.parquet')
df.dtypes
返回:
sepal_len float64
sepal_wid float64
petal_len float64
petal_wid float64
class object
dtype: object
^列是浮点数
#Read in h2o
iris2 = h2o.import_file('iris.parquet')
iris2.head(2)
返回:
sepal_len sepal_wid petal_len petal_wid class
nan 3.5 1.4 0.2 Iris-setosa
4.9 3 1.4 0.2. Iris-setosa
检查数据类型与 parquet 的定义保持一致(用 pandas 制作)
iris2.types
返回:
{'sepal_len': 'real',
'sepal_wid': 'real',
'petal_len': 'real',
'petal_wid': 'real',
'class': 'enum'}
^H2O 帧数据类型是真实的(不是枚举)
将 pandas 数据框更改为 str 列并保存为新的 parquet 文件:
#Save the parquet as a string column
df.astype({'sepal_len':'str'}).to_parquet('irisB.parquet')
#Read file again
irisB = h2o.import_file('irisB.parquet')
irisB.types
返回:
{'sepal_len': 'enum',
'sepal_wid': 'real',
'petal_len': 'real',
'petal_wid': 'real',
'class': 'enum'}