Python修改以下代码,实现SQL语句的dyano为前一天的时间:def spark_sql_test(): conf = SparkConf().setAppName("test_spark_sql").setMaster("yarn").setSparkHome("/usr/local/share/spark") sc = SparkContext(conf=conf) hc = HiveContext(sc) result = hc.sql("select * from oppo_os_pso.nps_question_new_label where use_time='18月' and phone_type in ('RENO 6','RENO6 PRO','RENO6 PRO+') and dayno = '2023-04-16'") result.printSchema() result.show()
时间: 2024-02-24 17:58:32 浏览: 25
可以使用Python中的datetime模块来实现日期的动态修改,修改后的代码如下:
```python
from datetime import datetime, timedelta
def spark_sql_test():
conf = SparkConf().setAppName("test_spark_sql").setMaster("yarn").setSparkHome("/usr/local/share/spark")
sc = SparkContext(conf=conf)
hc = HiveContext(sc)
dyano = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
result = hc.sql("select * from oppo_os_pso.nps_question_new_label where use_time='18月' and phone_type in ('RENO 6','RENO6 PRO','RENO6 PRO+') and dayno = '{}'".format(dyano))
result.printSchema()
result.show()
```
通过datetime.now()获取当前时间,然后减去timedelta(days=1)表示向前推一天。最后将日期格式化为'%Y-%m-%d'的形式作为SQL语句中的dayno值即可。
相关问题
将以下Python代码修改成结果为DataFrame的形式输出:def spark_sql_test(): conf = SparkConf().setAppName("test_spark_sql").setMaster("yarn").setSparkHome("/usr/local/share/spark") sc = SparkContext(conf=conf) hc = HiveContext(sc) result = hc.sql("select * from oppo_os_pso.nps_question_new_label where use_time='18月' and phone_type in ('RENO 6','RENO6 PRO','RENO6 PRO+') and dayno = '2023-04-16'") result.printSchema()
可以使用以下代码将查询结果存储为DataFrame:
```
from pyspark.sql import SparkSession
def spark_sql_test():
spark = SparkSession.builder.appName("test_spark_sql").enableHiveSupport().getOrCreate()
result = spark.sql("select * from oppo_os_pso.nps_question_new_label where use_time='18月' and phone_type in ('RENO 6','RENO6 PRO','RENO6 PRO+') and dayno = '2023-04-16'")
result.printSchema()
result.show()
spark.stop()
```
在上面的代码中,首先使用`SparkSession.builder.appName()`方法创建一个SparkSession对象,并使用`enableHiveSupport()`方法启用Hive支持。然后使用`spark.sql()`方法执行SQL查询,并将结果存储为DataFrame。最后,使用`result.show()`方法显示DataFrame中的数据,并使用`spark.stop()`方法关闭SparkSession对象。
请将以下代码修改成可以多次输入SQL获得多段数据,并不会报错Promise already completed:def spark_sql_test(m): conf = SparkConf().setAppName("test_spark_sql").setMaster("yarn").setSparkHome("/usr/local/share/spark") sc = SparkContext(conf=conf) hc = HiveContext(sc) result = hc.sql(m) spark = SparkSession.builder.appName("test_spark_sql").getOrCreate() df = spark.createDataFrame(result.rdd, result.schema) df_pd = df.toPandas() spark.stop() return df_pd
可以将函数修改为以下形式:
```
from pyspark.sql import SparkSession
def spark_sql_test(m):
spark = SparkSession.builder.appName("test_spark_sql").getOrCreate()
result = spark.sql(m)
df = spark.createDataFrame(result.rdd, result.schema)
df_pd = df.toPandas()
spark.stop()
return df_pd
```
这样修改后,可以多次调用 `spark_sql_test` 函数,每次传入不同的 SQL 语句进行查询,返回多段数据。同时,将 SparkConf 和 HiveContext 替换为 SparkSession 的方式,可以更加简洁地创建 SparkSession。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)