表面上它没有 items()
方法。那怎么办?
我正在尝试用以下代码将行发送到数据库:
def write_row(table_name, cur, row):
data = []
for key, value in row.items():
data.append((key, value))
data = zip(*data)
columns = ", ".join(data[0])
values = data[1]
questionmarks = ", ".join(["?"] * len(columns))
query = f"INSERT INTO {table_name} ({columns}) VALUES ({questionmarks})"
cur.execute(query, values)
def write_data_frame(df, epoch1):
conn = mariadb.connect(**config["mariadb"])
cur = conn.cursor()
table_name = "pysparktest"
rows = df.collect()
for row in rows:
write_row(table_name, cur, row)
conn.commit()
它发誓
AttributeError: items
如果行是嵌套的呢?
root
|-- track: struct (nullable = true)
| |-- name: string (nullable = true)
| |-- version: string (nullable = true)
|-- car: struct (nullable = true)
| |-- name: string (nullable = true)
| |-- version: string (nullable = true)
|-- cnt: long (nullable = false)
|-- minBestLapTime: double (nullable = true)
1条答案
按热度按时间guz6ccqo1#
就像编译器发誓的那样,row类中没有名为“items()”的方法。
你需要做的是使用“asdict”方法。它以python dict的形式输出行中的键、值。
对于嵌套列,asdict函数中有一个名为recursive的参数,将其设置为true。默认情况下,设置为false。
例如:
输出:
对于迭代:
输出:
如果是嵌套列
输出: