Trying to fetch closest neighbor for my given embedding, using below query:
vespa query -v 'yql=select text from VectorSearch3_content where {targetHits:10}nearestNeighbor(embedding,q)' 'hits=1' 'ranking=closeness' 'input.query(q)=$Q'
Do I need to define closeness somewhere. If so how and where to do it via pyvespa?
Tried fetching nearest neighbor record but got server error "message": "No profile named 'closeness' exists in schemas [VectorSearch3]"

The error means that the rank profile "closeness" is not defined. https://docs.vespa.ai/en/nearest-neighbor-search-guide.html#schema has an example of rank profile use.
For a simple pyvespa example, take a look at https://pyvespa.readthedocs.io/en/latest/examples/pyvespa-examples.html, where this snippet adds a rank profile to the schema:
In your example, something like (I don't know your tensor type / use correct field names)
for less confusion, one can call the rank profile something other than closeness and use 'ranking=myrankprofile' in the query - hope this helps!