python - 将带有 Numpy 值的 pandas Dataframe 转换为 pysparkSQL.DataFrame

标签 python pandas numpy pyspark apache-spark-sql

我使用 random.int 方法创建了一个 2 列 pandas df,以应用 groupby 操作生成第二个两列数据帧。 df.col1 是一系列列表,df.col2 一系列整数,列表内的元素类型为'numpy.int64',第二列的元素相同,作为随机的结果.int.

df.a        df.b
3            7
5            2
1            8
...

groupby operations 

df.col1        df.col2
[1,2,3...]    1
[2,5,6...]    2
[6,4,....]    3
...

当我尝试使用 Spark.createDataFrame(df) 构建 pyspark.sql 数据帧时,出现以下错误: 类型错误:不支持的类型:类型“numpy.int64”。

回到 df 生成,我尝试了不同的方法将元素从 numpy.int64 转换为 python int,但没有一个主题起作用:

np_list = np.random.randint(0,2500, size = (10000,2)).astype(IntegerType)
df = pd.DataFrame(np_list,columns = list('ab'), dtype = 'int')

我还尝试使用 lambda x: int(x) 或 x.item() 进行映射,但类型仍然是“numpy.int64”。

根据 pyspark.sql 文档,应该可以加载 pandas 数据帧,但是当它与 numpy 值一起使用时似乎不兼容。 有什么提示吗?

谢谢!

最佳答案

嗯,你的做法行不通。如果你有这样的事情。由于第一列,您将收到错误。 Spark 不理解类型为 numpy.int64 的列表

df.col1        df.col2
[1,2,3...]    1
[2,5,6...]    2
[6,4,....]    3
...

如果你有这样的事情。这个应该没问题。

df.a        df.b
3            7
5            2
1            8

就您的代码而言,请尝试以下操作:

np_list = np.random.randint(0,2500, size = (10000,2))
df = pd.DataFrame(np_list,columns = list('ab'))
spark_df = spark.createDataFrame(df)

您实际上并不需要再次将其转换为 int,如果您想显式执行此操作,则它是 array.astype(int)。然后只需执行 spark_df.head 即可。这应该可行!

关于python - 将带有 Numpy 值的 pandas Dataframe 转换为 pysparkSQL.DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45411815/

相关文章:

r - 在带有网状包的 R 中使用 Python - 找不到 Numpy

python - 如何处理不同版本的python protobuf

python - 在 python 中制作 keras 模型的深拷贝

python - 求和并获取不同计数 Python Pandas

python - numpy.linalg.norm 给出奇怪的结果

python - 获取 numpy 二维数组中与零相邻的所有元素的索引

python - 获取 Sympy 将分数展开为多项式方程

python manage.py runserver 没有名为 django.core.management 的模块

python pandas 在最后一个非 NaN 值处停止 fillna

python - 使用 Pandas 计算不同子段的 T 统计量