splited_genres_df['year'] = splited_genres_df['title'].str.extract('\((\d+)\)', expand=True)
splited_genres_df['title'] = splited_genres_df['title'].str.extract('(.+)\(\d+\)', expand=True)
splited_genres_df.show(10)
Fail to execute line 3: splited_genres_df['year'] = splited_genres_df['title'].str.extract('\((\d+)\)', expand=True)
Traceback (most recent call last):
File "/tmp/1639314988872-0/zeppelin_python.py", line 153, in <module>
exec(code, _zcUserQueryNameSpace)
File "<stdin>", line 3, in <module>
TypeError: 'Column' object is not callable
ARG_GENRES = '' # по дефолту равен '', но может принимать такие значение "Action|Comedy" или просто "Adventure"
YEAR_TO = 2009 # по дефолту равен 2030 чтобы точно все фильмы подошли
YEAR_FROM = 2000 # по дефолту равен 1800 чтобы точно все фильмы подошли
REGEXP = 'The' # по дефолту равен '' чтобы все значения подошли
N = 10 #? фильтр для колличества вывода результата
def get_line_from_string(bed_line):
result = []
b = bed_line.split(',', maxsplit=1)
c = b[1].rsplit(',', maxsplit=1)
if '"' in c[0]:
c[0] = c[0][1:-1]
line = [b[0], c[0], c[1]]
return line
def filter_by_regexp(string):
pattern = REGEXP
if re.search(pattern, string):
return True
def filter_by_year(string):
pattern = r'\(\d{4}\)'
if re.search(pattern, string):
year = int(re.search(r'\(\d{4}\)', string).group(0)[1:-1])
if YEAR_FROM <= year <= YEAR_TO:
return True
rdd = sc.textFile('hdfs:///movies.csv').map(lambda x: get_line_from_string(x))
rdd = rdd.filter(lambda list: filter_by_regexp(list[1]) and filter_by_year(list[1]))
rdd.take(5)
def get_list_from_rating_line(line):
_,movieId, rating,_ = line.split(',')
return [movieId, rating]
rating_rdd = sc.textFile('hdfs:///ratings.csv')
rating_rdd = rating_rdd.map(lambda x: get_list_from_rating_line(x))
rating_rdd.take(5)
import sys
def shuffle(data):
result = {} # result is a dict where key = genre, value = list with many 'film_title;year'
for line in data:
key, value = line.split("\t")
key = key[:-1]
value = value[1:-1]
if key not in result:
result[key] = []
result[key].append(value)
elif key in result:
result[key].append(value)
return result
if __name__ == "__main__":
print(shuffle(sys.stdin))
def do_map(data):
for line in data:
list_line = line.split(",")
list_line[2] = list_line[2][:-2]
# filter by year, regexp and genres
for key, value in filter_list_line_by_cmd_arguments(list_line):
yield key, value
do_map(sys. stdin)
import sys
def do_map(doc):
for word in doc.split():
yield word.lower(), 1
for line in sys.stdin:
for key, value in do_map(line):
print(key + "\t" + str(value))
ARG_GENRES = 'Sci-Fi|Action' - это запрос на фильмы, которые помечены хотя бы одним из тегов списка? Да
REGEXP = 'Terminator' - это всегда подстрока? или там реально может быть паттерн? Это подстрока
вот то что я написал, но это работает только если мы передаем один жанр