问题:从数据框的二进制类型列中提取列。数据帧是从azure的blob存储帐户加载的。
环境:
过程:
Avro模式:
SequenceNumber:long
Offset:string
EnqueuedTimeUtc:string
SystemProperties:map
key:string
value:struct
member0:long
member1:double
member2:string
member3:binary
Properties:map
key:string
value:struct
member0:long
member1:double
member2:string
member3:binary
Body:binary
我很难从Body:binary
获取数据。我设法使用下面的代码片段将列转换为字符串
df = df.withColumn("Body", col("Body").cast("string"))
我使用以下代码设法提取了正文列中的列列表:
#body string looks like json
dfBody = df.select(df.Body)
jsonList = (dfBody.collect())
jsonString = jsonList[0][0]
columns = []
data = json.loads(jsonString)
for key, value in data.items():
columns.append(key)
columns.sort()
print(columns)
该列表具有有趣的列,例如ID,状态,名称。
问题: 如何添加位于主体二进制列中的ID列并添加到当前数据帧中。通常,我要展平二进制列。二进制列也可能有数组。
答案 0 :(得分:0)
您不想收集数据框。相反,您应该能够投射和展平身体场。从外观上看,您正在使用来自事件中心的avro捕获。这是我用来处理此问题的代码:
var todayNY = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
if (todayNY.getDay() == 3) {
alert('Today is Wednesday in New York');
} else {
alert('Today is not Wednesday in New York');
}
我认为您需要的关键是from_json函数。