Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何构建变量名字符串?_Python 3.x_Pyspark - Fatal编程技术网

Python 3.x 如何构建变量名字符串?

Python 3.x 如何构建变量名字符串?,python-3.x,pyspark,Python 3.x,Pyspark,我试图构建一个包含类对象所有属性的字符串。对象名是jsonData,它有几个属性,其中一些属性是 jsonData.Serial, jsonData.InstrumentSerial, jsonData.Country 我想构建一个字符串,其中包含以下格式的属性名称: “串行仪表串行国家/地区” 最终目标是为Spark数据帧定义一个模式 只要我知道字符串/对象的顺序,我愿意选择其他方法,因为我需要将架构映射到适当的值。您必须小心筛选出不需要的属性,但请尝试以下方法: ' '.join([x f

我试图构建一个包含类对象所有属性的字符串。对象名是
jsonData
,它有几个属性,其中一些属性是

jsonData.Serial,
jsonData.InstrumentSerial,
jsonData.Country
我想构建一个字符串,其中包含以下格式的属性名称:

“串行仪表串行国家/地区”

最终目标是为Spark数据帧定义一个模式


只要我知道字符串/对象的顺序,我愿意选择其他方法,因为我需要将架构映射到适当的值。

您必须小心筛选出不需要的属性,但请尝试以下方法:

' '.join([x for x in dir(jsonData) if '__' not in x])
它过滤掉了所有的“神奇方法”,比如
\uuuuu init\uuuuuu
\uuuu new\uuuuuuu

要包含这些,请执行以下操作:

' '.join(dir(jsonData))

这些方法利用了Python的
dir
方法,该方法返回一个对象的所有属性列表。

您必须小心过滤掉不需要的属性,但请尝试以下方法:

' '.join([x for x in dir(jsonData) if '__' not in x])
它过滤掉了所有的“神奇方法”,比如
\uuuuu init\uuuuuu
\uuuu new\uuuuuuu

要包含这些,请执行以下操作:

' '.join(dir(jsonData))

它们利用了Python的
dir
方法,该方法返回一个对象所有属性的列表。

我不太明白为什么要将属性名称分组到一个字符串中。 您可以简单地拥有一个属性名列表,因为python列表的顺序是持久的

attribute_names = [x for x in dir(jsonData) if '__' not in x]
从那里您可以创建数据帧。如果不需要指定SparkTypes,您可以:

df = SparkContext.createDataFrame(data, schema = attribute_names)
您还可以创建一个
StructType
,并在模式中指定类型

我猜你会有一个清单,列出你想把它看作行的代码> JSONDATA < /Cord>记录。 让我们把它看作一个对象列表,但逻辑仍然是一样的。 您可以按如下方式执行此操作:

my_object_list = [
    jsonDataClass(Serial = 1, InstrumentSerial = 'TDD', Country = 'France'),
    jsonDataClass(Serial = 2, InstrumentSerial = 'TDI', Country = 'Suisse'),
    jsonDataClass(Serial = 3, InstrumentSerial = 'TDD', Country = 'Grece')]

def build_record(obj, attr_names):
   from operator import attrgetter
   return attrgetter(*attr_names)(obj)
因此,前面提到的数据属性将构造为:

data = [build_record(x, attribute_names) for x in my_object_list]

我不太明白为什么要将属性名分组在一个字符串中。 您可以简单地拥有一个属性名列表,因为python列表的顺序是持久的

attribute_names = [x for x in dir(jsonData) if '__' not in x]
从那里您可以创建数据帧。如果不需要指定SparkTypes,您可以:

df = SparkContext.createDataFrame(data, schema = attribute_names)
您还可以创建一个
StructType
,并在模式中指定类型

我猜你会有一个清单,列出你想把它看作行的代码> JSONDATA < /Cord>记录。 让我们把它看作一个对象列表,但逻辑仍然是一样的。 您可以按如下方式执行此操作:

my_object_list = [
    jsonDataClass(Serial = 1, InstrumentSerial = 'TDD', Country = 'France'),
    jsonDataClass(Serial = 2, InstrumentSerial = 'TDI', Country = 'Suisse'),
    jsonDataClass(Serial = 3, InstrumentSerial = 'TDD', Country = 'Grece')]

def build_record(obj, attr_names):
   from operator import attrgetter
   return attrgetter(*attr_names)(obj)
因此,前面提到的数据属性将构造为:

data = [build_record(x, attribute_names) for x in my_object_list]