请将以下代码修改成可以多次输入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
时间: 2024-03-28 14:41:23 浏览: 194
可以将函数修改为以下形式:
```
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。
相关问题
class Dog6: def __init__(self, initial_name): self._name = initial_name def get_self(self): return self def __str__(self): # # Implement this! # return __ def __repr__(self): return "<Dog named '" + self._name + "'>" def test_inside_a_method_self_refers_to_the_containing_object(self): fido = self.Dog6("Fido") self.assertEqual(__, fido.get_self()) # Not a string! def test_str_provides_a_string_version_of_the_object(self): fido = self.Dog6("Fido") self.assertEqual("Fido", str(fido)) def test_str_is_used_explicitly_in_string_interpolation(self): fido = self.Dog6("Fido") self.assertEqual(__, "My dog is " + str(fido)) def test_repr_provides_a_more_complete_string_version(self): fido = self.Dog6("Fido") self.assertEqual(__, repr(fido)) def test_all_objects_support_str_and_repr(self): seq = [1, 2, 3] self.assertEqual(__, str(seq)) self.assertEqual(__, repr(seq)) self.assertEqual(__, str("STRING")) self.assertEqual(__, repr("STRING"))
Here is the completed code with the missing parts:
```
class Dog6:
def __init__(self, initial_name):
self._name = initial_name
def get_self(self):
return self
def __str__(self):
return self._name
def __repr__(self):
return "<Dog named '" + self._name + "'>"
def test_inside_a_method_self_refers_to_the_containing_object(self):
fido = Dog6("Fido")
self.assertEqual(fido, fido.get_self()) # Not a string!
def test_str_provides_a_string_version_of_the_object(self):
fido = Dog6("Fido")
self.assertEqual("Fido", str(fido))
def test_str_is_used_explicitly_in_string_interpolation(self):
fido = Dog6("Fido")
self.assertEqual("My dog is Fido", "My dog is " + str(fido))
def test_repr_provides_a_more_complete_string_version(self):
fido = Dog6("Fido")
self.assertEqual("<Dog named 'Fido'>", repr(fido))
def test_all_objects_support_str_and_repr(self):
seq = [1, 2, 3]
self.assertEqual("[1, 2, 3]", str(seq))
self.assertEqual("[1, 2, 3]", repr(seq))
self.assertEqual("STRING", str("STRING"))
self.assertEqual("'STRING'", repr("STRING"))
```
Note that in `test_str_is_used_explicitly_in_string_interpolation`, the expected output is `"My dog is Fido"` instead of `"My dog is <Dog named 'Fido'>"` because the `+` operator implicitly calls `str` on the object being concatenated.
class DATA_LOADER(object): def __init__(self, opt): if opt.matdataset: if opt.dataset == 'imageNet1K': self.read_matimagenet(opt) else: self.read_matdataset(opt) self.index_in_epoch = 0 self.epochs_completed = 0
这段代码定义了一个名为DATA_LOADER的类,用于加载数据集。让我来解释一下这段代码的逻辑:
该类的构造函数__init__接受一个参数opt,表示数据加载的选项。
首先,代码检查opt中的matdataset属性是否为True。如果是,说明数据集是以MATLAB格式存储的数据集。
接下来,代码判断opt中的dataset属性是否为'imageNet1K'。如果是,说明要加载的数据集是ImageNet1K数据集,然后调用self.read_matimagenet(opt)函数来读取MATLAB格式的ImageNet1K数据。
如果不是'imageNet1K',则调用self.read_matdataset(opt)函数来读取其他MATLAB格式的数据集。
最后,代码初始化self.index_in_epoch为0,表示当前批次中样本的索引。self.epochs_completed初始化为0,表示已经完成的轮数。
该类的作用是根据给定的选项加载数据集,并提供一些方法来获取训练样本。在实例化该类后,可以通过调用类对象的方法来获取训练样本数据。
阅读全文