PySpark toPandas 函数正在改变列类型
Posted
技术标签:
【中文标题】PySpark toPandas 函数正在改变列类型【英文标题】:PySpark toPandas function is changing column type 【发布时间】:2020-03-24 16:38:28 【问题描述】:我有一个具有以下架构的 pyspark 数据框:
root
|-- src_ip: integer (nullable = true)
|-- dst_ip: integer (nullable = true)
通过toPandas()
将此数据帧转换为pandas时,列类型从spark中的整数变为pandas中的float:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9847 entries, 0 to 9846
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 src_ip 9607 non-null float64
1 dst_ip 9789 non-null float64
dtypes: float64(2)
memory usage: 154.0 KB
有没有办法用toPandas()
保持整数值,或者我只能在生成的熊猫数据框中转换列类型?
【问题讨论】:
【参考方案1】:SPARK-21766 (https://issues.apache.org/jira/browse/SPARK-21766) 解释了您观察到的行为。
作为一种解决方法,您可以在 toPandas() 之前调用 fillna(0):
df1 = sc.createDataFrame([(0, None), (None, 8)], ["src_ip", "dest_ip"])
print(df1.dtypes)
# Reproduce the issue
pdf1 = df1.toPandas()
print(pdf1.dtypes)
# A workaround
pdf2 = df1.fillna(0).toPandas()
print(pdf2.dtypes)
【讨论】:
以上是关于PySpark toPandas 函数正在改变列类型的主要内容,如果未能解决你的问题,请参考以下文章
toPandas() 会随着 pyspark 数据框变小而加快速度吗?
如何在 PySpark 中提取对长度敏感的特征而不使用 .toPandas() hack?
pyspark/EMR 中大型 DataFrame 上的 collect() 或 toPandas()