简体   繁体   中英

How to split dataframe column in PySpark

I have a .csv dataset containing Amazon book reviews. I looks like this:

B000F83SZQ|[0, 0]|5.0|I enjoy vintage books and movies so I enjoyed reading this book.  The plot was unusual.  Don't think killing someone in self-defense but leaving the scene and the body without notifying the police or hitting someone in the jaw to knock them out would wash today.Still it was a good read for me.|05 5, 2014|A1F6404F1VG29J|Avidreader|Nice vintage story|1399248000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
B000F83SZQ|[2, 2]|4.0|This book is a reissue of an old one   the author was born in 1910. It's of the era of, say, Nero Wolfe. The introduction was quite interesting, explaining who the author was and why he's been forgotten     I'd never heard of him.The language is a little dated at times, like calling a gun a &#34  heater.&#34   I also made good use of my Fire's dictionary to look up words like &#34   deshabille&#34   and &#34   Canarsie.&#34    Still, it was well worth a look-see.|01 6, 2014|AN0N05A9LIJEQ|critters|Different...|1388966400                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
B000F83SZQ|[2, 2]|4.0|This was a fairly interesting read.  It had old- style terminology.I was glad to get  to read a story that doesn't have coarse, crasslanguage.  I read for fun and relaxation......I like the free ebooksbecause I can check out a writer and decide if they are intriguing,innovative, and have enough of the command of Englishthat they can convey the story without crude language.|04 4, 2014|A795DMNCJILA6|dot|Oldie|1396569600                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
B000F83SZQ|[1, 1]|5.0|I'd never read any of the Amy Brewster mysteries until this one..  So I am really hooked on them now.|02 19, 2014|A1FV0SX13TWVXQ|Elaine H. Turley "Montana Songbird"|I really liked it.|1392768000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
B000F83SZQ|[0, 1]|4.0|If you like period pieces - clothing, lingo, you will enjoy this mystery.  Author had me guessing at least 2/3 of the way through.|03 19, 2014|A3SPTOKDG7WBLN|Father Dowling Fan|Period Mystery|1395187200                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
B000F83SZQ|[0, 0]|4.0|A beautiful in-depth character description makes it like a fast pacing movie. It is a pity Mr Merwin did not write 30 instead only 3 of the Amy Brewster mysteries.|05 26, 2014|A1RK2OCZDSGC6R|ubavka seirovska|Review|1401062400                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
B000F83SZQ|[0, 0]|4.0|I enjoyed this one tho I'm not sure why it's called An Amy Brewster Mystery as she's not in it very much. It was clean, well written and the characters well drawn.|06 10, 2014|A2HSAKHC3IBRE6|Wolfmist|Nice old fashioned story|1402358400                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
B000F83SZQ|[1, 1]|4.0|Never heard of Amy Brewster. But I don't need to like Amy Brewster to like this book. Actually, Amy Brewster is a side kick in this story, who added mystery to the story not the one resolved it. The story brings back the old times, simple life, simple people and straight relationships.|03 22, 2014|A3DE6XGZ2EPADS|WPY|Enjoyable reading and reminding the old times|1395446400                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
B000FA64PA|[0, 0]|5.0|Darth Maul working under cloak of darkness committing sabotage now that is a story worth reading many times over.  Great story.|10 11, 2013|A1UG4Q4D3OAH3A|dsa|Darth Maul|1381449600                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
B000FA64PA|[0, 0]|4.0|This is a short story focused on Darth Maul's role in helping the Trade Federation gain a mining colony. It's not bad, but it's also nothing exceptional. It's fairly short so we don't really get to see any characters develop. The few events that do happen seem to go by quickly, including what should have been major battles. The story is included in the novelShadow Hunter (Star Wars: Darth Maul), which is worth reading, so don't bother to buy this one separately.|02 13, 2011|AQZH7YTWQPOBE|Enjolras|Not bad, not exceptional|1297555200                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
B000FA64PA|[0, 0]|5.0|I think I have this one in both book and audio. It is a good story either way. good ol' Maul.|01 27, 2014|A1ZT7WV0ZUA0OJ|Mike|Audio and book|1390780800                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
B000FA64PA|[0, 0]|4.0|Title has nothing to do with the story.  I did enjoy it though.  Good short story about Darth Maul setting up two corporations against each other.  All in the end to help Darth Sidious' rise to power.  Won't take you long to read & it's cheap.  Go for it.|09 17, 2011|A2ZFR72PT054YS|monkeyluis|Darth Maul...the brother I never had.|1316217600                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

The first number in the second column shows the number of people the found the review useful. The second number the second column show the total number of people that voted on the review. Right now I want to generate two new columns. Each containing one of the numbers. I tried several thing but it doesnt seem to work. Here is my code:

from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
import json
import pandas as pd
from functools import reduce
import pyspark.sql.functions as F
#from pyspark.sql.functions import lit
from pyspark.sql.functions import col, split


conf = SparkConf().setAppName("Open json").setMaster("local[*]")
sc = SparkContext(conf = conf)

sqlContext = SQLContext(sc)

df = sqlContext.read.csv('Kindle.csv', sep='|', header=None)

oldColumns = df.schema.names
newColumns = ["asin", "helpful", "overall", "Reviewtext", 
              "reviewTime", "reviewerID", "reviewerName", "summary", 
              "unixReviewTime"]

df = reduce(lambda df, idx: df.withColumnRenamed(oldColumns[idx], newColumns[idx]), range(len(oldColumns)), df)


df.select(df.columns[1]).show(n=10)
df_help = df.select(df.columns[1])
print(df_help)
df.show(n=10)
test = df_help.withColumn("helpful", split(col("helpful"), ",").cast("array<int>"))
test.show(n=10)

test2 = df.select("helpful", F.regexp_replace(F.col("helpful"), "[\$#]", "").alias("replaced"))

test2.show()
test2.select(col("helpful"), split(col("helpful"), ",\s*").alias("help")).show()

I then get this:

Image of table

For some reason I am not able to split the data directly. I am also unable to remove the brackets of the second column. When I try I just get more brackets.

You are almost close, all you need is appropriate regex and use casting (that you have already done) after the regexp_replace and split inbuilt functions . so the correct and working solution would be as

df = spark.read.csv('Kindle.csv', sep='|', header=None)

oldColumns = df.schema.names
newColumns = ["asin", "helpful", "overall", "Reviewtext",
              "reviewTime", "reviewerID", "reviewerName", "summary",
              "unixReviewTime"]

df = reduce(lambda df, idx: df.withColumnRenamed(oldColumns[idx], newColumns[idx]), range(len(oldColumns)), df)

from pyspark.sql import functions as F
df = df.withColumn("helpful", F.split(F.regexp_replace(F.col("helpful"), "[\[\] ]", ""), ",").cast('array<int>'))\
    .withColumn('useful_review', F.col('helpful')[0])\
    .withColumn('voted_review', F.col('helpful')[1])\
    .drop('helpful') 

so df would be

+----------+-------+--------------------+-----------+--------------+--------------------+--------------------+--------------------+-------------+------------+
|      asin|overall|          Reviewtext| reviewTime|    reviewerID|        reviewerName|             summary|      unixReviewTime|useful_review|voted_review|
+----------+-------+--------------------+-----------+--------------+--------------------+--------------------+--------------------+-------------+------------+
|B000F83SZQ|    5.0|I enjoy vintage b...| 05 5, 2014|A1F6404F1VG29J|          Avidreader|  Nice vintage story|1399248000       ...|            0|           0|
|B000F83SZQ|    4.0|This book is a re...| 01 6, 2014| AN0N05A9LIJEQ|            critters|        Different...|1388966400       ...|            2|           2|
|B000F83SZQ|    4.0|This was a fairly...| 04 4, 2014| A795DMNCJILA6|                 dot|               Oldie|1396569600       ...|            2|           2|
|B000F83SZQ|    5.0|I'd never read an...|02 19, 2014|A1FV0SX13TWVXQ|Elaine H. Turley ...|  I really liked it.|1392768000       ...|            1|           1|
|B000F83SZQ|    4.0|If you like perio...|03 19, 2014|A3SPTOKDG7WBLN|  Father Dowling Fan|      Period Mystery|1395187200       ...|            0|           1|
|B000F83SZQ|    4.0|A beautiful in-de...|05 26, 2014|A1RK2OCZDSGC6R|    ubavka seirovska|              Review|1401062400       ...|            0|           0|
|B000F83SZQ|    4.0|I enjoyed this on...|06 10, 2014|A2HSAKHC3IBRE6|            Wolfmist|Nice old fashione...|1402358400       ...|            0|           0|
|B000F83SZQ|    4.0|Never heard of Am...|03 22, 2014|A3DE6XGZ2EPADS|                 WPY|Enjoyable reading...|1395446400       ...|            1|           1|
|B000FA64PA|    5.0|Darth Maul workin...|10 11, 2013|A1UG4Q4D3OAH3A|                 dsa|          Darth Maul|1381449600       ...|            0|           0|
|B000FA64PA|    4.0|This is a short s...|02 13, 2011| AQZH7YTWQPOBE|            Enjolras|Not bad, not exce...|1297555200       ...|            0|           0|
|B000FA64PA|    5.0|I think I have th...|01 27, 2014|A1ZT7WV0ZUA0OJ|                Mike|      Audio and book|1390780800       ...|            0|           0|
|B000FA64PA|    4.0|Title has nothing...|09 17, 2011|A2ZFR72PT054YS|          monkeyluis|Darth Maul...the ...|          1316217600|            0|           0|
+----------+-------+--------------------+-----------+--------------+--------------------+--------------------+--------------------+-------------+------------+

I hope the answer is helpful

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM