我正在使用flatmap解析数据帧,它工作得很好,但我无法将最终结果重塑为多列数据集。如何解析这个RDD?这是我在平面图之后的结果的示例行:
[Row(XXXX-XXXX-XXXX-XXXXX-XXXXXX={'m_ci_id': 'XXXX-XXXX-XXXX-XXXXX-XXXXXX', 'ci_id': 'XXXX-XXXX-XXXX-XXXXX-XXXXXX', 'pp_breaker_power_phase': 'L1_L2', 'pp_breaker_poles': 2, 'pp_breaker_panel_circuit_number': 2, 'cp_ci_id': None, 'cp_value': None, 'phase': 'L1', 'pole': 2})]
我正在传递一个数据帧,其中的列与您在dict中看到的列相同,这是我在flatmap中使用的函数:
def get_poles_phases(row):
"""
:param row:
:return:
"""
new_rows = []
initial_pole = row.pp_breaker_panel_circuit_number
phases = row.pp_breaker_power_phase.split('_')
for _ in range(row.pp_breaker_poles):
temp = row.asDict()
temp['phase'] = phases[_]
temp['pole'] = initial_pole
if row.cp_value != 'Phase Grouping':
initial_pole += 2
else:
logger.error('Panel configuration not recognized.')
new_rows.append(row(temp))
return new_rows
我尝试了Structfields的模式,但没有成功
cols = [StructField('m_ci_id', StringType(), True),
StructField('ci_id', StringType(), True),
StructField('pp_breaker_power_phase', StringType(), True),
StructField('pp_breaker_poles', StringType(), True),
StructField('pp_breaker_panel_circuit_number', StringType(), True),
StructField('cp_ci_id', StringType(), True),
StructField('cp_value', StringType(), True),
StructField('phase', StringType(), True),
StructField('pole', StringType(), True)]
schema = StructType(cols)
poles_phases = poles_phases.toDF(schema)
我还尝试传递一个列名列表
poles_phases = poles_phases.toDF(['m_ci_id', 'ci_id', 'pp_breaker_power_phase', 'pp_breaker_poles', 'pp_breaker_panel_circuit_number', 'cp_ci_id', 'cp_value', 'phase', 'pole'])
我怀疑这是行不通的,因为我得到的RDD只有一列,但我不知道如何解析单个dict以便模式匹配
我想出来了:
这是通过解包value dict来构建新行。之后,您可以使用
如果您有
None
个值,则模式推理可能会失败,因此需要显式声明它,例如相关问题 更多 >
编程相关推荐