将pyspark中的Dataframe转换为配置单元

cyej8jka  于 2021-06-29  发布在  Hive
关注(0)|答案(3)|浏览(409)

如何将Dataframe发送到配置单元表?
我知道如果我有一个sparkDataframe,我可以使用

df.registerTempTable("table_name")
sqlContext.sql("create table table_name2 as select * from table_name")

但是,当我尝试使用pandasDataframe来注册可清空时,出现以下错误:

AttributeError: 'DataFrame' object has no attribute 'registerTempTable'

有没有一种方法可以让我使用pandasDataframe来注册一个temp表,或者将它转换成sparkDataframe,然后使用它注册一个temp表,这样我就可以将它发送回hive。

a9wyjsp7

a9wyjsp71#

我把我的Pandasdf换成了临时桌
1) 将pandasDataframe转换为sparkDataframe:

spark_df=sqlContext.createDataFrame(Pandas_df)

2) 确保数据已正确迁移

spark_df.select("*").show()

3) 将sparkDataframe转换为临时表以进行查询。

spark_df.registerTempTable("table_name").

干杯。。

wf82jlnq

wf82jlnq2#

我猜你是想利用Pandas df 而不是spark的df。
pandas dataframe没有这样的方法 registerTempTable .
你可以尝试从Pandasdf创建spark df。
更新:
我已经在cloudera下测试了它(安装了anaconda包,其中包括pandas模块)。
确保您已设置 PYSPARK_PYTHON 到所有spark workers上的anaconda python安装(或另一个包含pandas模块的安装)(通常在: spark-conf/spark-env.sh )
以下是我的测试结果:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.random.randint(0,100,size=(10, 3)), columns=list('ABC'))
>>> sdf = sqlContext.createDataFrame(df)
>>> sdf.show()
+---+---+---+
|  A|  B|  C|
+---+---+---+
| 98| 33| 75|
| 91| 57| 80|
| 20| 87| 85|
| 20| 61| 37|
| 96| 64| 60|
| 79| 45| 82|
| 82| 16| 22|
| 77| 34| 65|
| 74| 18| 17|
| 71| 57| 60|
+---+---+---+

>>> sdf.printSchema()
root
 |-- A: long (nullable = true)
 |-- B: long (nullable = true)
 |-- C: long (nullable = true)
3z6pesqy

3z6pesqy3#

首先,您需要将pandasDataframe转换为sparkDataframe:

from pyspark.sql import HiveContext
hive_context = HiveContext(sc)
df = hive_context.createDataFrame(pd_df)

然后你可以在记忆中创造一个诱人的东西:

df.registerTempTable('tmp')

现在,您可以使用配置单元ql将数据保存到配置单元中:

hive_context.sql("""insert overwrite table target partition(p='p') select a,b from tmp'''

注意than:the hive_context 一定要保持一致!

相关问题