![](/img/trans.png)
[英]Convert a PySpark Dataframe Column to a Python List depending on the value in another column
[英]Convert Column value in Dataframe to list
我有以下源文件。 我的文件中有一個名為“ john
”的名字,想要拆分為列表['j','o','h','n']
。 請按如下方式查找人員文件。
源文件:
id,name,class,start_data,end_date
1,john,xii,20170909,20210909
代碼:
from pyspark.sql import SparkSession
def main():
spark = SparkSession.builder.appName("PersonProcessing").getOrCreate()
df = spark.read.csv('person.txt', header=True)
nameList = [x['name'] for x in df.rdd.collect()]
print(list(nameList))
df.show()
if __name__ == '__main__':
main()
實際輸出:
[u'john']
期望輸出:
['j','o','h','n']
如果你想在python中:
nameList = [c for x in df.rdd.collect() for c in x['name']]
或者如果你想在火花中做到這一點:
from pyspark.sql import functions as F
df.withColumn('name', F.split(F.col('name'), '')).show()
結果:
+---+--------------+-----+----------+--------+
| id| name|class|start_data|end_date|
+---+--------------+-----+----------+--------+
| 1|[j, o, h, n, ]| xii| 20170909|20210909|
+---+--------------+-----+----------+--------+
nameList = [x for x in 'john']
.tolist() 將 pandas 系列轉換為 python 列表,因此您應該首先從數據創建一個列表,然后遍歷創建的列表。
namelist=df['name'].tolist()
for x in namelist:
print(x)
如果您在 spark scala (spark 2.3.1 & scala-2.11.8) 中執行此操作,則以下代碼有效。 我們將得到一個帶有空白名稱的額外記錄,因此對其進行過濾。
import spark.implicits._ val classDF = spark.sparkContext.parallelize(Seq((1, "John", "Xii", "20170909", "20210909"))) .toDF("ID", "Name", "類", "Start_Date", "End_Date")
classDF.withColumn("Name", explode((split(trim(col("Name")), ""))))
.withColumn("Start_Date", to_date(col("Start_Date"), "yyyyMMdd"))
.withColumn("End_Date", to_date(col("End_Date"), "yyyyMMdd")).filter(col("Name").=!=("")).show
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.